遅延パブリッシュ
遅延パブリッシュは、EMQXがサポートする拡張MQTT機能です。クライアントがトピックプレフィックス $delayed/{DelayInterval}
を付けてEMQXにメッセージをパブリッシュすると、遅延パブリッシュ機能がトリガーされます。メッセージはユーザーが事前に定義した時間経過後にパブリッシュされます。
遅延パブリッシュのトピックの具体的な形式は以下の通りです。
$delayed/{DelayInterval}/{TopicName}
$delayed
:$delayed
で始まるメッセージは遅延が必要なメッセージとして扱われます。遅延時間は次のトピックレベルの内容で決まります。{DelayTime}
:このMQTTメッセージのパブリッシュを遅延させる時間間隔またはタイムスタンプを秒単位で指定します。時間間隔の場合、最大許容間隔は42949670秒(約497日)です。タイムスタンプの場合は、現在のシステム時刻から42949670秒以内でなければなりません。{DelayTime}
が整数として解析できないか、または有効範囲外の場合はメッセージは破棄されます。{TopicName}
:MQTTメッセージのトピック名です。
例:
$delayed/15/x/y
:15秒後にトピックx/y
にMQTTメッセージをパブリッシュする$delayed/60/a/b
:1分後にトピックa/b
にMQTTメッセージをパブリッシュする$delayed/1743490800/chat/id
:2025年4月1日9:00(ストックホルム時間)にトピックchat/id
にメッセージをパブリッシュする$delayed/3600/$SYS/topic
:1時間後にトピック$SYS/topic
にMQTTメッセージをパブリッシュする
ダッシュボードで遅延パブリッシュを設定する
EMQXダッシュボードを開きます。左側のナビゲーションメニューで Management -> Delayed Publish をクリックします。
Delayed Publish ページで以下を設定できます:
- Enable:遅延パブリッシュを有効または無効にします。デフォルトでは有効です。
- Max Delayed Messages:遅延メッセージの最大数を指定できます。
MQTTX Desktopで遅延パブリッシュを試す
前提条件
MQTTX Desktop を使った基本的なパブリッシュとサブスクライブ操作
EMQXとMQTTX Desktopを起動します。New Connection をクリックしてパブリッシャーとしてクライアント接続を作成します。
- Name フィールドに
Demo
と入力します。 - Host にローカルホスト
127.0.0.1
を入力します(このデモの例として)。 - 他の設定はデフォルトのままにして Connect をクリックします。
TIP
MQTT接続の作成に関する詳細な手順は MQTTX Desktop を参照してください。
- Name フィールドに
もう一つMQTT接続を作成し、サブスクライバーとして設定します。
Connections ペインで
Demo
という名前の接続を選択します。トピックテキストボックスに$delayed/10/x/y
と入力し、メッセージにDelayed Message
と入力します。$delayed
:遅延メッセージであることを示します。10
:遅延間隔が10秒であることを示します。x/y
:メッセージのトピック名を示します。
Connections ペインで
Subscriber
という名前の接続を選択します。New Subscription ボタンをクリックしてサブスクリプションを作成します。Topic テキストボックスにx/y
と入力してこのトピックをサブスクライブし、Confirm をクリックします。Connections ペインで
Demo
という名前の接続を選択します。送信ボタンをクリックして、トピック$delayed/10/x/y
でDelayed Message
を送信します。10秒待ちます。
Subscriber
という名前の接続が10秒後に遅延メッセージを受信するのが確認できます。
MQTTX CLIで遅延パブリッシュを試す
前提条件
MQTTX CLI を使った基本的なパブリッシュとサブスクライブ操作
サブスクライバーとして新しい接続を作成し、トピック
t/1
をサブスクライブします。bashmqttx sub -t t/1 -v
新しいターミナルウィンドウを開き、パブリッシャーとして以下のコマンドを使って遅延メッセージを送信します。サブスクライバーは5秒後にメッセージを受信します。
bashmqttx pub -t "\$delayed/5/t/1" -m "Hello Delayed msg"