1

Service Bus で問題が発生しています。

  1. 2 つのサブスクリプションを持つトピックがあります。
  2. それらに対して重複検出を有効にしました。ウィンドウは 1 分です (最初は 2 秒で試しました)。重複検出を使用して、短い間隔で複数のメッセージが処理されるのを回避しています (メッセージ間の間隔を維持するため)。
  3. メッセージ スケジューリング ( ScheduledEnqueueTimeUtc ) を使用して、同じメッセージ ID で 5 分後に表示されるメッセージを繰り返します (新しいメッセージがスケジュールで作成され、古いメッセージが完了するたびに)
  4. ワークフローは次のとおりです (問題)。
    • メッセージが初めて公開されたとき (スケジュールなし)
    • このメッセージはすぐにメッセージ ポンプによって消費され、5 分後に表示されることを期待して、同じ詳細と 5 分のスケジュール時刻を持つ新しいメッセージがトピック (UTC) に送信されます。
    • メッセージがサブスクリプションに表示されない
  5. デバッグすると、この問題は発生しません
  6. 少なくとも 30 秒の遅延 (予定) で最初のメッセージを送信すると、正常に動作しています
  7. 重複検出をオフにしてトピックとサブスクリプションを再作成すると、上記のワークフローを使用してメッセージを取得できます

公開されたメッセージに何が起こっているのか手がかりがないため、問題の根本原因を特定するための支援が必要です.

4

1 に答える 1

0

これは、ASB の予期される動作です。メッセージがスケジュールされると、実際にはブローカーのキューに入れられ、表示が遅れます。サーバー側の ASB は、到着時にメッセージの重複を排除し、メッセージ ID を使用して重複を排除します。

あなたの場合、2番目のメッセージのディスパッチを遅らせて元のメッセージが処理されると、重複排除するものは何もなく、2番目のメッセージがキューに入れられます。遅延しない場合、ブローカーは、以前に送信されたメッセージと同じ ID を認識しますが、まだ完了していないか、まだ DLQ されていないため、重複除去されます。

考えられる方法は、同じトランスポート メッセージ ID (に使用される ID) を再利用しないBrokeredMessageことです。メッセージを関連付ける必要がある場合はProperties、そのために使用できます。

于 2016-08-18T14:18:37.330 に答える