1

バックグラウンド

クライアント (Web アプリ) から何百万ものメッセージを取得している Azure Service Bus にトピック ( T1 ) があります。3 つの異なるバックグラウンド プロセス (ワーカー ロール) によって作成されたフィルターのない3 つのサブスクリプション ( S1、S2、S3 ) があります。

問題

ワーカー ロールが実行されているとき、最初のサブスクリプション ( S1 ) だけがメッセージをまったく受け取っているように見え、残り ( S2 および S3 ) は何も受信しないか、その一部を取得します。すべてのサブスクライバーは、まったく同じ設定でフィルターなしで同じ方法で作成されます。

Service Bus Explorer はS1 の正しいメッセージ数 (~100K)を表示しますが、S2 と S3 のアクティブなメッセージ数は非常に少ないです ( 10 未満で、通常は 0 )。どういうわけか、クライアントが受信することさえせずにメッセージが削除されているようです。

何が問題で、メッセージ数がサブスクライバー間で一致しない理由を調査する最善の方法は何ですか。何が間違っている可能性があるかについて何か提案はありますか?

4

2 に答える 2

1

問題のサブスクリプションを確認します。サブスクリプションは、独自のDefaultMessageTimeToLiveをサポートします。ただし、デフォルトでは最大に設定されています。サブスクリプションの作成に使用したコードを見てください。おそらく、QueueDescriptionDefaultMessageTimeToLive やその他の値をカスタマイズするために使用しています。

また、EnableDeadLetteringOnMessageExpirationを有効にして、メッセージの有効期限が切れているかどうかを確認します。

MaxDeliveryCountを確認してください。値が低すぎてメッセージが正常に処理されない場合、配信カウントが最大値を超え、メッセージが送信されないか配信不能になります。

それに加えて、フィルタリングが稼働している場合は、 EnableDeadLetteringOnFilterEvaluationExceptionsを有効にすることで確認できます。

何も役に立たない場合は、GutHub または BitBucket に再現コードへのリンクを投稿して、人々が何が行われたかを確認できるようにします。

于 2016-07-28T09:41:01.937 に答える