私はAzure Service Bus Topicsをプロダクションアプリケーションで使用しています。私の理解では、システムは、発行されたときにサブスクリプション終了時に少なくとも1つのメッセージのコピーを保証します。Azureサービスバスのトピック:メッセージの重複が発生するのはなぜですか?
実際には、一般に1つのメッセージが公開に対応しています。いくつかの縮退したケースでは、私は倍数を見ます。たとえば、関連するサブスクリプションの〜20個のメッセージに対応する1個のパブリッシュ。現在、このサブスクリプションを使用しているものは何もありません。これがパブリッシングロジックだと私は信じています。
どのような状況でメッセージが広がっているのですか?ネットワーキングの妨げが原因かもしれないと思います。ほかに何か?
デフォルトの重複処理ロジックではこれを処理できないことに注意してください。あなたは、同じ身体と別個のメッセージIDを持つ複数のメッセージを持っています。私が理解しているのは、メッセージ「アイデンティティ」を確立するために使用されます。
EDIT: 私の出版ロジックはかなり単純で、次のようになります。
public void PublishSomeId(Guid someId, int eventDelayInMinutes, string componentName)
{
var topicClient = ServiceBusManager.GetTopicClient();
var message = new BrokeredMessage(someId);
message.To = componentName;
message.ScheduledEnqueueTimeUtc = DateTime.UtcNow.AddMinutes(eventDelayInMinutes);
topicClient.Send(message);
}
詳細については、この質問に回答する必要があります。あなたの出版ロジックは何ですか?別のIDで同じペイロードを20回公開すると、そのイベントの20個の「コピー」が作成されます。あなたのトポロジはどのように見えますか?この情報がなければ、これは非常に推測です。 –
実際の実装とよく似たコードサンプルを追加する質問を編集しました。逸話的に私はbody 'someId'で約20のメッセージを見る。ログの助けを借りて、私はこのメソッドが 'someId'で一度だけ呼び出されたことを知っています。 –
確かに、何も幻想的ではありません。トピックの設定とそのトピックの下に潜んでいるものは何ですか? –