4

Azure Service Bus トピックを介して Web ロール パブリッシャーにサブスクライブする外部クライアントを含む pub/sub アプリケーションがあります。現在の請求サイクルでは、25,000 件を超えるメッセージを送受信したことが示されていますが、ダッシュボードでは、送信したメッセージが 100 件未満であることが示されています。差異を理解するために、実装を調査し、仮定を確認しています。

調査の一環として、クライアント マシン上のクライアント<=>サービス バス トラフィックの Wireshark キャプチャを収集しました。文書化されていない定期的な通信パターンに気付き、より深く理解したいと考えています。次の交換は、バス上でアクティビティがない場合に 50 秒ごとに 1 回発生します。

  1. クライアントは ~200B をサービス バスにプッシュします。
  2. 10 秒後、サービス バスは ~800B をクライアントにプッシュします。クライアントは、空のメッセージの受信を登録します (ブレークポイントによって決定されます)。
  3. クライアントはすぐに応答して、サービス バスに ~1000B をプッシュします。

関連情報:

  • これは、Web ロールがアクティブにデータをサービス バスにプッシュしていない場合に発生します。
  • Web ロールから正当なメッセージを受信すると、50 秒が完全に経過するまで上記のパターンは発生しません。
  • クライアントとサーバーの両方が TCP 経由で sb:// namespace .servicebus.windows.net に接続します。
  • アプリケーション メッセージは 64 KB 未満です

質問

  1. 私たちが見ている定期的な 3 パケットのメッセージ交換の原因は何ですか? それはある種のキープアライブですか?
  2. 3 つのパケットはそれぞれ、個別に請求可能なメッセージとしてカウントされますか?
  3. この動作は構成可能ですか、それとも文書化されていますか?

編集:

メッセージを受信するコードは次のとおりです。

    private void Listen()
    {
        _subscriptionClient.ReceiveAsync().ContinueWith(MessageReceived);
    }

    private void MessageReceived(Task<BrokeredMessage> task)
    {
        if (task.Status != TaskStatus.Faulted && task.Result != null)
        {
            task.Result.CompleteAsync();
            // Do some things...
        }
        Listen();
    }
4

1 に答える 1