Azure Service Bus は重複メッセージをどのように識別しますか? 質問する

Azure Service Bus は重複メッセージをどのように識別しますか? 質問する

Azure Service Bus には、他のメッセージと重複していると思われるメッセージを削除する重複メッセージ検出機能があると理解しています。この機能を使用して、重複配信を防ぎたいと思います。

私が興味を持っているのは、サービスがどのようにして 2 つのメッセージが実際に重複していると判断するかということです。

  • メッセージのどのようなプロパティが考慮されますか?
  • メッセージの内容は考慮されますか?
  • 内容は同じだがメッセージ プロパティが異なる 2 つのメッセージを送信した場合、それらは重複と見なされますか?

ベストアンサー1

重複検出は、MessageIdブローカーされたメッセージのプロパティを調べます。したがって、メッセージ ID を、受信するメッセージごとに一意になるような値に設定すると、重複検出でそれを検出できます。私の知る限り、検出にはメッセージ ID のみが使用されます。メッセージの内容は確認されないため、実際の内容は同じでもメッセージ ID が異なる 2 つのメッセージが送信された場合、それらは重複として検出されません。

参考文献:

MSDN ドキュメント:https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-queues-topics-subscriptions

シナリオで重複処理が許容されない場合は、配信試行全体で一定に保たれるメッセージの MessageId プロパティに基づいて重複を検出するための追加ロジックがアプリケーションに必要になります。これは、Exactly Once 処理と呼ばれます。

また、ブローカーメッセージ重複検出コードサンプルWindowsAzure.com では、それを証明するためにまさにあなたが探しているものが見つかるはずです。

RequiresDuplicateDetection私もこれを簡単にテストし、 がtrue に設定されたキューに 5 つのメッセージを送信しました。これらのメッセージはすべて内容がまったく同じですが、 が異なりますMessageIds。次に、5 つのメッセージすべてを取得しました。次に、一致するが異なるペイロードがある場合に逆の操作を実行しましたがMessageIds、取得されたメッセージは 1 つだけでした。

おすすめ記事