Skip to content

データソースとフィールド ​

EMQXのルールは、MQTTメッセージ、MQTTイベント、またはデータブリッジなど、さまざまなデータソースからのデータを処理できます。

ルールエンジン構文のセクションで説明したように、FROM句を使用してデータソースを指定し、対応するフィールドをSELECT句やwhere句で参照できます。本セクションでは、MQTTメッセージ、MQTTイベント、およびデータブリッジのフィールドについて紹介します。

MQTTメッセージ ​

EMQXのルールを使ってメッセージのパブリッシュを処理する場合、FROM句でメッセージのトピックを指定する必要があります。

例えば、以下のステートメントでは、トピックパターンt/#にパブリッシュされたメッセージのpayload.msg(AS句でmsgに名前変更)、clientid、username、payload、topic、qosのフィールドを選択しています。

例:

sql
SELECT
  payload.msg as msg,
  clientid,
  username,
  payload,
  topic,
  qos
FROM
  "t/#"

出力例:

json
{
  "username": "u_emqx",
  "topic": "t/a",
  "qos": 1,
  "payload": "{\"msg\":\"hello\"}",
  "msg": "hello",
  "clientid": "c_emqx"
}

EMQX 6.0.3以降、ネームスペースが有効でかつrule_engine.limit_selects_in_namespaceがtrueに設定されている場合、ネームスペースに属するルールは同じネームスペース内のクライアントからパブリッシュされたメッセージのみでトリガーされます。この設定はデフォルトで有効です。

以下の表は、受信したMQTTメッセージから選択可能なフィールドを示しています:

フィールド説明
idMQTTメッセージID
clientidパブリッシャーのクライアントID
usernameパブリッシャーのユーザー名
payloadMQTTペイロード
peerhostクライアントのIPアドレス
topicMQTTトピック
qosQoSレベル
flagsフラグ
headersメッセージ処理に関連する内部データ
pub_propsPUBLISHプロパティ(MQTT 5.0クライアントのみ)
timestampタイムスタンプ(単位:ミリ秒)
publish_received_atPUBLISHメッセージがEMQXに到達した時刻(単位:ミリ秒)
nodeイベントがトリガーされたEMQXノード
client_attrsクライアント属性

MQTTイベント ​

EMQXのルールを使って、クライアントのオンライン・オフラインやサブスクリプションなどのイベント通知を取得するためにイベントトピックからデータを抽出できます。イベントトピックは"$events/"で始まり、例えば"$events/client/connected"などがあり、ルールのFROM句で指定可能です。

EMQX 6.0.3以降、ネームスペースが有効でかつrule_engine.limit_selects_in_namespaceがtrueに設定されている場合、ネームスペースに属するルールは同じネームスペース内のクライアントに関連するイベントのみでトリガーされます。システムアラームイベントはクライアントネームスペースに関連付けられていません。この設定が有効な場合、"$events/sys/alarm_activated"および"$events/sys/alarm_deactivated"はルールをトリガーしません。

TIP

デフォルトでは、クライアントはMQTTイベントメッセージを直接サブスクライブできません。本セクションでは、ルールを使ってこれらのメッセージをサブスクライブする方法を説明します。MQTTイベントメッセージのデータは、システムトピックをサブスクライブすることでも取得可能です。

以下の表はサポートされているイベントトピックの一覧です。

イベントトピック一覧 ​

イベントトピック名説明
$events/message/deliveredメッセージ配信完了
$events/message/ackedメッセージ配信アック
$events/message/droppedルーティング時のメッセージドロップ
$events/message/delivery_dropped配信時のメッセージドロップ
$events/client/connected接続完了
$events/client/disconnected切断
$events/client/connack接続応答
$events/auth/check_authz_complete認可チェック完了
$events/auth/check_authn_complete認証チェック完了
$events/session/subscribedサブスクライブ
$events/session/unsubscribedアンサブスクライブ
$events/sys/alarm_activatedアラーム有効化
$events/sys/alarm_deactivatedアラーム無効化
$events/client/pingPINGREQパケット受信

TIP

EMQX 5.10.0以降、イベントトピックにネームスペースが導入され、論理的で階層的な構造に再編成されました。これにより、イベントトピックの明確化、フィルタリング、管理が向上しています。

後方互換性のため、旧イベントトピックも引き続きサポートされていますが、新規設定では新しいネームスペース付きトピックの使用を推奨します。以下の表は旧トピックと新(ネームスペース付き)トピックの対応表です。

旧イベントトピック新イベントトピック
$events/client_connected$events/client/connected
$events/client_disconnected$events/client/disconnected
$events/client_connack$events/client/connack
$events/client_check_authz_complete$events/auth/check_authz_complete
$events/client_check_authn_complete$events/auth/check_authn_complete
$events/session_subscribed$events/session/subscribed
$events/session_unsubscribed$events/session/unsubscribed
$events/message_delivered$events/message/delivered
$events/message_acked$events/message/acked
$events/message_dropped$events/message/dropped
$events/delivery_dropped$events/message/delivery_dropped
$events/message_transformation_failed$events/message_transformation/failed
$events/schema_validation_failed$events/schema_validation/failed

メッセージ配信完了イベント ("$events/message/delivered") ​

このイベントトピックは、メッセージがクライアントに配信された際にルールをトリガーするために使用できます。

例えば、"$events/message/delivered"イベントトピックから、パブリッシャーのIDとユーザー名、メッセージトピック、メッセージQoS、イベントがトリガーされたEMQXノード、イベント発生時刻のフィールドを抽出するには、以下のステートメントを使用します。

例:

sql
SELECT
  from_clientid,
  from_username,
  topic,
  qos,
  node,
  timestamp
FROM
  "$events/message/delivered"

出力例:

json
{
  "topic": "t/a",
  "timestamp": 1645002753259,
  "qos": 1,
  "node": "emqx@127.0.0.1",
  "from_username": "u_emqx_1",
  "from_clientid": "c_emqx_1"
}

以下は各フィールドの詳細説明です。

フィールド説明
idMQTTメッセージID
from_clientidパブリッシャーのクライアントID
from_usernameパブリッシャーのユーザー名
clientidサブスクライバーのクライアントID
usernameサブスクライバーのユーザー名
payloadMQTTペイロード
peerhostクライアントのIPアドレス
topicMQTTトピック
qosQoSレベル
flagsフラグ
pub_propsPUBLISHプロパティ(MQTT 5.0クライアントのみ)
timestampイベントトリガー時刻(単位:ミリ秒)
publish_received_atPUBLISHメッセージがEMQXに到達した時刻(単位:ミリ秒)
nodeイベントがトリガーされたEMQXノード

メッセージ配信アックイベント ("$events/message/acked") ​

このイベントトピックは、メッセージ配信がアックされた際にルールをトリガーするために使用できます。

TIP

QoS 1およびQoS 2のメッセージのみ利用可能です。

例えば、"$events/message/acked"イベントトピックから、パブリッシャーのIDとユーザー名、メッセージトピック、メッセージQoS、イベントがトリガーされたEMQXノード、イベント発生時刻のフィールドを抽出するには、以下のステートメントを使用します。

例:

sql
SELECT
  from_clientid,
  from_username,
  topic,
  qos,
  node,
  timestamp
FROM
  "$events/message/acked"

出力例:

json
{
  "topic": "t/a",
  "timestamp": 1645002965664,
  "qos": 1,
  "node": "emqx@127.0.0.1",
  "from_username": "u_emqx_1",
  "from_clientid": "c_emqx_1"
}

以下は各フィールドの詳細説明です。

フィールド説明
idMQTTメッセージID
from_clientidパブリッシャーのクライアントID
from_usernameパブリッシャーのユーザー名
clientidサブスクライバーのクライアントID
usernameサブスクライバーのユーザー名
payloadMQTTペイロード
peerhostクライアントのIPアドレス
topicMQTTトピック
qosQoSレベル
flagsフラグ
pub_propsPUBLISHプロパティ(MQTT 5.0のみ)
puback_propsPUBACKプロパティ(MQTT 5.0のみ)
timestampイベントトリガー時刻(単位:ミリ秒)
publish_received_atPUBLISHメッセージがEMQXに到達した時刻(単位:ミリ秒)
nodeイベントがトリガーされたEMQXノード

ルーティング時のメッセージドロップイベント ("$events/message/dropped") ​

このイベントトピックは、メッセージがルーティング中にドロップされた際にルールをトリガーするために使用できます。

例えば、"$events/message/dropped"イベントトピックから、ドロップ理由、メッセージトピック、メッセージQoS、イベントがトリガーされたEMQXノード、イベント発生時刻のフィールドを抽出するには、以下のステートメントを使用します。

例:

sql
SELECT
  reason,
  topic,
  qos,
  node,
  timestamp
FROM
  "$events/message/dropped"

出力例:

json
{
  "topic": "t/a",
  "timestamp": 1645003103004,
  "reason": "no_subscribers",
  "qos": 1,
  "node": "emqx@127.0.0.1"
}
フィールド説明
idMQTTメッセージID
reasonドロップ理由:

no_subscribers: トピックにサブスクライブするクライアントがいない

receive_maximum_exceeded: awaiting_relキューが満杯

packet_identifier_inuse: 未解放のパケットIDを持つQoS 2メッセージを受信した場合
clientidパブリッシャーのクライアントID
usernameパブリッシャーのユーザー名
payloadMQTTペイロード
peerhostクライアントのIPアドレス
topicMQTTトピック
qosQoSレベル
flagsフラグ
pub_propsPUBLISHプロパティ(MQTT 5.0のみ)
timestampイベントトリガー時刻(単位:ミリ秒)
publish_received_atPUBLISHメッセージがEMQXに到達した時刻(単位:ミリ秒)
nodeイベントがトリガーされたノード

配信時のメッセージドロップイベント ("$events/message/delivery_dropped") ​

このイベントトピックは、メッセージが配信中にドロップされた際にルールをトリガーするために使用できます。

例えば、"$events/message/delivery_dropped"イベントトピックから、パブリッシャーのIDとユーザー名、ドロップ理由、メッセージトピックおよびQoSのフィールドを抽出するには、以下のステートメントを使用します。

例:

sql
SELECT
  from_clientid,
  from_username,
  reason,
  topic,
  qos
FROM "$events/message/delivery_dropped"

出力例:

json
{
  "topic": "t/a",
  "reason": "queue_full",
  "qos": 1,
  "from_username": "u_emqx_1",
  "from_clientid": "c_emqx_1"
}

以下は各フィールドの詳細説明です。

フィールド説明
idMQTTメッセージID
reasonドロップ理由:

queue_full: QoS>0のメッセージキューが満杯

no_local: クライアント自身がパブリッシュしたメッセージの受信不可

expired: メッセージまたはセッションが期限切れ

qos0_msg: QoS 0メッセージキューが満杯
from_clientidパブリッシャーのクライアントID
from_usernameパブリッシャーのユーザー名
clientidサブスクライバーのクライアントID
usernameサブスクライバーのユーザー名
payloadMQTTペイロード
peerhostクライアントのIPアドレス
topicMQTTトピック
qosメッセージのQoS
flagsフラグ
pub_propsPUBLISHプロパティ(MQTT 5.0クライアントのみ)
timestampイベントトリガー時刻(単位:ミリ秒)
publish_received_atPUBLISHメッセージがEMQXに到達した時刻(単位:ミリ秒)
nodeイベントがトリガーされたEMQXノード

接続完了イベント ("$events/client/connected") ​

このイベントトピックは、クライアントが正常に接続した際にルールをトリガーするために使用できます。

例えば、"$events/client/connected"イベントトピックから、クライアントID、ユーザー名、キープアライブ間隔、接続したMQTTクライアントがブリッジとして動作しているかどうかのフィールドを抽出するには、以下のステートメントを使用します。

例:

sql
SELECT
  clientid,
  username,
  keepalive,
  is_bridge
FROM
  "$events/client/connected"

出力例:

json
{
  "username": "u_emqx",
  "keepalive": 60,
  "is_bridge": false,
  "clientid": "c_emqx"
}

以下の表は、受信したMQTTメッセージから選択可能なフィールドを示しています。

フィールド説明
clientidクライアントID
usernameクライアントのユーザー名
mountpointブリッジメッセージのマウントポイント
peernameクライアントのIPアドレスとポート
socknameEMQXがリッスンしているIPアドレスとポート
proto_nameプロトコル名
proto_verプロトコルバージョン
keepaliveMQTTキープアライブ間隔
clean_startMQTTのclean_startフラグ
expiry_intervalMQTTセッションの有効期限
is_bridgeクライアントがブリッジとして動作しているかどうか
connected_atクライアントの接続完了時刻(単位:ミリ秒)
conn_propsCONNECTプロパティ(MQTT 5.0クライアントのみ)
timestampイベントトリガー時刻(単位:ミリ秒)
nodeイベントがトリガーされたEMQXノード
client_attrsクライアント属性

切断イベント ("$events/client/disconnected") ​

このイベントトピックは、クライアントが切断された際にルールをトリガーするために使用できます。

例えば、"$events/client/disconnected"イベントトピックから、クライアントID、ユーザー名、切断理由、接続時間、切断時間、イベントがトリガーされたEMQXノードのフィールドを抽出するには、以下のステートメントを使用します。

例:

sql
SELECT
  clientid,
  username,
  reason,
  connected_at,
  disconnected_at,
  node
FROM
  "$events/client/disconnected"

出力例:

json
{
  "username": "u_emqx",
  "reason": "normal",
  "node": "emqx@127.0.0.1",
  "connected_at": 1645003578036,
  "disconnected_at": 1645003578536,
  "clientid": "c_emqx"
}
フィールド説明
reason切断理由

normal: クライアントが意図的に切断

kicked: REST API経由でEMQXが強制切断

keepalive_timeout: キープアライブ時間切れ

not_authorized: 認可失敗

tcp_closed: ピアがネットワーク接続を閉じた

discarded: 同じClientIDでclean_start=trueの別クライアントが接続し、前の接続が切断された

takenover: 同じClientIDでclean_start=falseの別クライアントが接続し、前の接続を引き継いだ

internal_error: 不正なメッセージ形式やその他不明なエラー発生
clientidクライアントID
usernameクライアントのユーザー名
peernameクライアントのIPアドレスとポート
socknameEMQXがリッスンしているIPアドレスとポート
connected_atクライアントの接続開始時刻(単位:ミリ秒)。このタイムスタンプは現在のセッションが確立された時刻を示し、切断イベントがどの接続セッションに属するかを識別します。遅延した切断イベントが新しい接続状態を上書きしないようにします。
disconnected_atクライアントの切断完了時刻(単位:ミリ秒)
disconn_propsDISCONNECTプロパティ(MQTT 5.0クライアントのみ)
timestampイベントトリガー時刻(単位:ミリ秒)
nodeイベントがトリガーされたEMQXノード
client_attrsクライアント属性

接続応答イベント ("$events/client/connack") ​

このイベントトピックは、EMQXがクライアントにCONNACKパケットを送信した際にルールをトリガーするために使用できます。

例:

sql
SELECT
  clientid,
  username,
  reason_code,
  node
FROM
  "$events/client/connack"

出力例:

json
{
  "username": "u_emqx",
  "reason_code": "success",
  "node": "emqx@127.0.0.1",
  "connected_at": 1645003578536,
  "clientid": "c_emqx"
}

以下の表は抽出可能なフィールドを示しています。

フィールド説明
reason_code理由コード*
clientidパブリッシャーのクライアントID
usernameパブリッシャーのユーザー名
peernameIPアドレスとポート
socknameEMQXがリッスンしているIPアドレスとポート
proto_nameプロトコル名
proto_verプロトコルバージョン
keepaliveMQTTキープアライブ間隔
clean_startMQTTのclean_startフラグ
expiry_intervalMQTTセッションの有効期限
conn_propsCONNECTプロパティ(MQTT 5.0クライアントのみ)
timestampイベントトリガー時刻(単位:ミリ秒)
nodeアラームがトリガーされたEMQXノード

[^*]: MQTT v5.0プロトコルでは、リターンコードは理由コードに名称が変更され、より多様なエラータイプを示す理由コードが追加されています(Reason code and ACK - MQTT 5.0 new features)。

以下はMQTT v3.1.1とMQTT v5.0の理由コード一覧です。

認可チェック完了イベント ("$events/auth/check_authz_complete") ​

このイベントトピックは、クライアントの認可チェックが完了した際にルールをトリガーするために使用できます。

例:

sql
SELECT
  clientid,
  username,
  topic,
  action,
  result,
  authz_source,
  node
FROM
  "$events/auth/check_authz_complete"

出力例:

json
{
  "username": "u_emqx",
  "topic": "t/a",
  "action": "publish",
  "result": "allow",
  "authz_source": "cache",
  "node": "emqx@127.0.0.1",
  "clientid": "c_emqx"
}

以下の表は抽出可能なフィールドを示しています。

フィールド説明
clientidクライアントID
usernameユーザー名
peerhostクライアントのIPアドレス
topicMQTTトピック
actionパブリッシュまたはサブスクライブのアクション
resultアクセス制御チェックの結果
authz_source認可のソース
timestampタイムスタンプ(単位:ミリ秒)
nodeイベントがトリガーされたEMQXノード
client_attrsクライアント属性

認証チェック完了イベント ("$events/auth/check_authn_complete") ​

このイベントトピックは、クライアントの認証チェックが完了した際にルールをトリガーするために使用できます。

例:

sql
SELECT
  clientid,
  username,
  reason_code,
  is_superuser,
  is_anonymous
FROM
  "$events/auth/check_authn_complete"

出力例:

json
{
  "clientid": "c_emqx",
  "username": "u_emqx",
  "reason_code": "success",
  "is_superuser": true,
  "is_anonymous": false
}

以下の表は抽出可能なフィールドを示しています。

フィールド説明
clientidクライアントID
usernameユーザー名
peernameクライアントのIPアドレス
reason_code認証結果
is_superuserスーパーユーザーかどうか
is_anonymous匿名ユーザーかどうか
client_attrsクライアント属性

サブスクライバーイベント ("$events/session/subscribed") ​

このイベントトピックは、クライアントが正常にサブスクライブした際にルールをトリガーするために使用できます。

例:

sql
SELECT
  clientid,
  username,
  topic,
  qos
FROM
  "$events/session/subscribed"

出力例:

json
{
  "username": "u_emqx",
  "topic": "t/a",
  "qos": 1,
  "clientid": "c_emqx"
}

以下の表は抽出可能なフィールドを示しています。

フィールド説明
clientidクライアントID
usernameクライアントのユーザー名
peerhostクライアントのIPアドレス
topicMQTTトピック
qosQoSレベル
sub_propsSUBSCRIBEプロパティ(MQTT 5.0クライアントのみ)
timestampイベントトリガー時刻(単位:ミリ秒)
nodeイベントがトリガーされたEMQXノード
client_attrsクライアント属性

アンサブスクライブイベント ("$events/session/unsubscribed") ​

このルールは、クライアントのサブスクリプションが正常にキャンセルされた際にトリガーされます。

例:

sql
SELECT
  clientid,
  username,
  topic,
  qos
FROM
  "$events/session/unsubscribed"

出力例:

json
{
  "username": "u_emqx",
  "topic": "t/a",
  "qos": 1,
  "clientid": "c_emqx"
}

以下の表は抽出可能なフィールドを示しています。

フィールド説明
clientidクライアントID
usernameクライアントのユーザー名
peerhostクライアントのIPアドレス
topicMQTTトピック
qosQoSレベル
unsub_propsUNSUBSCRIBEプロパティ(MQTT 5.0クライアントのみ)
timestampイベントトリガー時刻(単位:ミリ秒)
nodeイベントがトリガーされたEMQXノード
client_attrsクライアント属性

システムアラーム有効化イベント ("$events/sys/alarm_activated") ​

このイベントトピックは、EMQXのシステムアラームが有効化された際にルールをトリガーするために使用できます。

例えば、"$events/sys/alarm_activated"イベントトピックから、アラーム名、詳細、説明メッセージ、有効化時刻のフィールドを抽出するには、以下のステートメントを使用します。

例:

sql
SELECT
  name,
  details,
  message,
  activated_at,
  node
FROM
  "$events/sys/alarm_activated"

出力例:

json
{
  "name": "too_many_processes",
  "details": {
    "usage": "99%",
    "high_watermark": "80%"
  },
  "message": "99% process usage",
  "activated_at": 1645003578536000,
  "node": "emqx@127.0.0.1"
}

以下の表は抽出可能なフィールドを示しています。

フィールド説明
nameアラームの短い識別子(例:"too_many_processes")
detailsアラームの追加詳細を含むJSONオブジェクト(スキーマは固定されていません。例:{"usage": "99%", "high_watermark": "80%"})
messageアラームの説明メッセージ(例:"99% process usage")
activated_atアラームが有効化されたUnixタイムスタンプ(マイクロ秒)
nodeイベントがトリガーされたEMQXノード

システムアラーム無効化イベント ("$events/sys/alarm_deactivated") ​

このルールは、EMQXのシステムアラームが無効化された際にトリガーされます。

例えば、"$events/sys/alarm_deactivated"イベントトピックから、アラーム名、詳細、説明メッセージ、有効化タイムスタンプ、無効化タイムスタンプのフィールドを抽出するには、以下のステートメントを使用します。

例:

sql
SELECT
  name,
  details,
  message,
  activated_at,
  deactivated_at,
  node
FROM
  "$events/sys/alarm_deactivated"

出力例:

json
{
  "name": "too_many_processes",
  "details": {
    "usage": "99%",
    "high_watermark": "80%"
  },
  "message": "99% process usage",
  "activated_at": 1645003578536000,
  "deactivated_at": 1645004000000000,
  "node": "emqx@127.0.0.1"
}

以下の表は抽出可能なフィールドを示しています。

フィールド説明
nameアラームの短い識別子(例:"too_many_processes")
detailsアラームの追加詳細を含むJSONオブジェクト(スキーマは固定されていません。例:{"usage": "99%", "high_watermark": "80%"})
messageアラームの説明メッセージ(例:"99% process usage")
activated_atアラームが有効化されたUnixタイムスタンプ(マイクロ秒)
deactivated_atアラームが無効化されたUnixタイムスタンプ(マイクロ秒)
nodeイベントがトリガーされたEMQXノード

クライアントキープアライブ(PING)イベント ("$events/client/ping") ​

このイベントトピックは、EMQXが接続中のMQTTクライアントからPINGREQパケットを受信した際にルールをトリガーするために使用できます。これはクライアントのハートビートが正常に受信されたことを示します。

主に診断やトラブルシューティングに利用されます。$events/client/disconnectedはクライアントが切断された理由(例:keepalive_timeout)を説明しますが、"$events/client/ping"イベントはEMQXが実際にクライアントからのハートビートパケットを受信した直接的な証拠を提供し、クライアント側やネットワーク側の問題とブローカー側の問題を区別するのに役立ちます。

例えば、"$events/client/ping"イベントトピックから、クライアントID、ユーザー名、ネゴシエートされたキープアライブ間隔、イベントトリガー時刻、イベントがトリガーされたEMQXノードのフィールドを抽出するには、以下のステートメントを使用します。

例:

sql
SELECT
  clientid,
  username,
  keepalive,
  timestamp,
  node
FROM
  "$events/client/ping"

出力例:

json
{
  "clientid": "c_emqx",
  "username": "u_emqx",
  "keepalive": 60,
  "timestamp": 1645003800123,
  "node": "emqx@127.0.0.1"
}

以下の表はクライアントPINGイベントから抽出可能なフィールドを示しています。

フィールド説明
clientidクライアントID
clean_startMQTTのclean_startフラグ
usernameクライアントのユーザー名
peernameクライアントのIPアドレスとポート
socknameEMQXがリッスンしているIPアドレスとポート
proto_nameプロトコル名
proto_verプロトコルバージョン
keepaliveネゴシエートされたMQTTキープアライブ間隔
timestampイベントトリガー時刻(単位:ミリ秒)
nodeイベントがトリガーされたEMQXノード
conn_propsCONNECTプロパティ(MQTT 5.0クライアントのみ)
expiry_intervalMQTTセッションの有効期限

データブリッジ ​

ルールは、データブリッジによってトリガーされたメッセージやイベントを、$bridges/で始まるトピックで参照します。形式は以下の通りです。

$bridges/<type>:<name>

ここで、

  • <type>:<name>はブリッジID、
  • <type>はブリッジタイプ、
  • <name>はブリッジ名です。

例えば、MQTTブリッジのイベントは"$bridges/mqtt:*"の形式で参照できます。MQTTデータブリッジmy_mqtt_bridgeが送信するすべてのメッセージに対してルールを設定するには、以下のステートメントを使用します。

例:

sql
SELECT
  *
FROM
  "$bridges/mqtt:my_mqtt_bridge"

出力例:

json
{
  "id": "0005E27C1D24E44FF440000017520000",
  "server": "broker.emqx.io:1883",
  "payload": "hello",
  "topic": "t/a",
  "qos": 1,
  "dup": false,
  "retain": false,
  "pub_props": {
    "Message-Expiry-Interval": 30,
    "Payload-Format-Indicator": 0,
    "User-Property": {
      "foo": "bar"
    },
    "User-Property-Pairs": [
      {
        "key": "foo"
      },
      {
        "value": "bar"
      }
    ]
  },
  "message_received_at": 1645002753259,
}

返される各フィールドの説明は以下の通りです。

フィールド説明
idMQTTメッセージID
serverリモートMQTTブローカーのサーバー名(例:"broker.emqx.io:1883")
payloadMQTTペイロード
topicMQTTトピック
qosMQTTのQoS
dupMQTTのDUPフラグ
retainMQTTのRetainフラグ
pub_propsPUBLISHプロパティ(MQTT 5.0クライアントのみ)
message_received_atメッセージ受信時刻のタイムスタンプ(単位:ミリ秒)