遅延パブリッシュ
遅延パブリッシュは、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のマウントポイントとの非互換性
遅延パブリッシュは、マウントポイントが設定されたリスナー経由で接続されたクライアントには対応していません。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"