遅延パブリッシュ
遅延パブリッシュは、EMQXがサポートする拡張されたMQTT機能です。クライアントがトピックプレフィックス $delayed/{DelayInterval} を付けてEMQXにメッセージをパブリッシュすると、遅延パブリッシュ機能がトリガーされます。メッセージはユーザーが事前に定義した時間経過後にパブリッシュされます。
遅延パブリッシュのトピックの具体的な形式は以下の通りです。
$delayed/{DelayInterval}/{TopicName}$delayed:$delayedで始まるメッセージは遅延が必要なメッセージとして扱われます。遅延時間は次のトピックレベルの内容で決定されます。{DelayTime}:このMQTTメッセージのパブリッシュを遅延させる時間間隔またはタイムスタンプを秒単位で指定します。間隔の場合、最大許容間隔は42949669秒(約497日)です。タイムスタンプの場合、現在のシステム時刻から42949669秒より前または後であってはなりません。{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メッセージをパブリッシュする
Listener Mountpointとの非互換性
遅延パブリッシュは、マウントポイントが設定されたリスナー経由で接続されたクライアントでは動作しません。EMQXはマウントポイントを $delayed/ プレフィックスのマッチング前に適用するため、メッセージは即座に通常のメッセージとしてマウントされたリテラルトピック(例:mp/$delayed/10/t)にルーティングされます。クライアントにはエラーは報告されません。
ダッシュボードで遅延パブリッシュを設定する
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"