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をクリックすると詳細を表示し、問題のトラブルシューティングが可能です。