Skip to content

スローサブスクリプション

通常、EMQXはメッセージの送信をミリ秒単位で完了しますが、主にネットワークの影響を受けます。しかし、クライアント側でサブスクリプションメッセージのレイテンシが非常に高くなるケースがあります。この問題を解決するために、EMQXはスローサブスクリプション機能を提供しています。

動作原理

EMQXはメッセージがEMQXに到着してから処理および送信されるまでの時間(遅延)を計測し始めます。

遅延が指定された閾値を超えた場合、EMQXは該当するサブスクライバーとトピックスローサブスクリプションリストに追加するか、既存の記録を更新します。

スローサブスクリプションリストについて:

  • 記録は遅延時間の降順で表示され、最大1000件まで保存されます。
  • リストには閾値を超えたメッセージではなく、サブスクライバー-トピックのデータが記録されます。
  • 新しい記録が生成されるとリストに挿入され、既存の記録の場合は発生時間が更新されます。いずれの場合もリスト全体が再ランキングされます。
  • 記録生成後、指定された有効期間内(デフォルト:300秒)に再度トリガーされなければリストから削除されます。

メッセージ送信完了の定義はQoSレベルによって異なります:

  • QoS 0: メッセージが正常に送信された時点
  • QoS 1: EMQXがクライアントからPUBACKパケットを受信した時点
  • QoS 2: EMQXがクライアントからPUBCOMPパケットを受信した時点

メッセージ遅延に影響を与える要因:

  • パブリッシャーとEMQX間のネットワークが遅い(将来のリリースで対応予定)
  • フックの実行速度が遅く、ACLチェック、ExHooks、ルールエンジンなどでメッセージパブリッシュがブロックされる
  • キューにメッセージが大量に蓄積し、著しい遅延が発生する(例:PUBLISHとSUBSCRIBEが同じ接続を共有し、多数のPUBLISHメッセージがキューに溜まる)
  • サブスクライバーの受信速度が遅い

スローサブスクリプションの有効化と設定

EMQXダッシュボードの左ナビゲーションメニューから Diagnose -> Slow Subscriptions をクリックします。Slow Subscriptions ページで Enable ボタンをクリックしてください。

設定項目は以下の通りです:

  • Stats Threshold: 統計を取るためのレイテンシ閾値。この値を超えるメッセージ情報のみ収集されます。最小値:100ms
  • Maximum Number of Statistics: スローサブスクリプション統計記録テーブルの最大レコード数。最大値:1,000
  • Eviction Time of Record: 記録の有効期間。記録作成からカウントを開始し、指定期間内に再度トリガーされなかった記録はリストから削除されます。デフォルト:300秒
  • Stats Type: レイテンシ計算方法。以下のいずれかを選択します
    • whole: メッセージがEMQXに到着してから送信完了までの時間
    • internal: メッセージがEMQXに到着してからEMQXがメッセージの配信を開始するまでの時間
    • response: EMQXがメッセージ配信を開始してから送信完了までの時間

スローサブスクリプションリストの確認

スローサブスクリプションリストには以下の項目が含まれます:

  • Client ID: スローサブスクリプション問題があるクライアント
  • Topic: スローサブスクリプション問題があるトピック
  • Duration: メッセージの遅延時間
  • Node: スローサブスクリプション問題があるノード
  • Updated: 記録の作成・更新日時

Client IDをクリックすると詳細を表示し、問題のトラブルシューティングが可能です。