TsgcWSPClient_MQTTメソッド › Publish

Publish メソッド

リクエストされた QoS と retain フラグを使用してトピックにメッセージをパブリッシュします。

オーバーロード

オーバーロード 1

構文

function Publish(const aTopic, aText: String; aQoS: TmqttQoS = mtqsAtMostOnce; aRetain: Boolean = False; const aPublishProperties: TsgcWSMQTTPublish_Properties = nil) : Word;

パラメータ

名前タイプ説明
aTopicconst Stringメッセージがパブリッシュされる完全修飾トピック名(ワイルドカードなし)。
aTextconst StringPUBLISH パケットボディとして送信される UTF-8 ペイロード。
aQoSTmqttQoS配信保証: mtqsAtMostOnce (0)、mtqsAtLeastOnce (1)、またはmtqsExactlyOnce (2)。デフォルトはmtqsAtMostOnceです。
aRetainBooleanTrueの場合、ブローカーはメッセージをトピックの保持値として保存し、新しいサブスクライバーに転送します。
aPublishPropertiesconst TsgcWSMQTTPublish_Propertiesオプションの MQTT 5.0 プロパティ (コンテンツタイプ、応答トピック、メッセージ有効期限、ユーザープロパティ)。省略する場合は nil を渡します。

戻り値

PUBLISH パケットに割り当てられたパケット識別子。QoS 1 および 2 では 0 以外、QoS 0 では 0 です。OnMQTTPubAck、OnMQTTPubRec、OnMQTTPubComp との相関付けに使用します。(Word

解説

テキストオーバーロード。JSON ドキュメントやその他の UTF-8 コンテンツに最適です。呼び出しはパケットがトランスポートに渡されるとすぐに返ります。QoS 1/2 の確認は非同期で配信されます。Connect で確立されたアクティブな MQTT セッションが必要です。

使用例

MQTT.Publish('sensors/temp', '{"value":22.5}', mtqsAtLeastOnce, True);

オーバーロード 2

構文

function Publish(const aTopic: String; const aStream: TStream; aQoS: TmqttQoS = mtqsAtMostOnce; aRetain: Boolean = False; const aPublishProperties: TsgcWSMQTTPublish_Properties = nil) : Word;

パラメータ

名前タイプ説明
aTopicconst Stringバイナリペイロードが公開される完全修飾トピック名。
aStreamconst TStreamPUBLISH ペイロードとして逐語的に送信されるソースストリームの完全な内容。位置はコンポーネントによって保存および復元されます。
aQoSTmqttQoS配信保証: mtqsAtMostOnce (0)、mtqsAtLeastOnce (1)、またはmtqsExactlyOnce (2)。デフォルトはmtqsAtMostOnceです。
aRetainBooleanTrue の場合、ブローカーはペイロードをトピックの保持値として保存します。
aPublishPropertiesconst TsgcWSMQTTPublish_Propertiesオプションの MQTT 5.0 プロパティ。通常、バイナリデータを送信する際のコンテンツタイプ (例: image/png) を設定するために使用します。

戻り値

PUBLISH パケットのパケット識別子。QoS 0 の場合はゼロ。確認応答イベントとの相関を可能にします。(Word

解説

ファイル、プロトバフフレーム、画像、その他の非テキストペイロード用のバイナリオーバーロード。シリアライズ前にストリームが全体的に読み込まれるため、非常に大きなペイロードはアプリケーションレイヤーでチャンク化して大きなアロケーションを避ける必要があります。QoS、Retain、プロパティの動作はテキストオーバーロードと同一です。

使用例

oStream := TFileStream.Create('firmware.bin', fmOpenRead or fmShareDenyWrite);
try
  MQTT.Publish('devices/123/firmware', oStream, mtqsExactlyOnce);
finally
  oStream.Free;
end;

メソッドに戻る