2017-02-18 1 views
3

私はAzure ServiceBusを使い始めました。 1つのことは私には完全にはっきりしていません。私は答えを見つけるのに苦労しています。Azure ServiceBus:すべてのトピックのサブスクライバがメッセージを処理する必要があります

私がサブスクリプションメッセージにmessage.Complete()を呼び出すと、このメッセージは他のサブスクライバにはもう配信されませんか、または現在のサブスクライバに対してのみこのメッセージを完了していますか?言い換えれば、サービスバスは加入者ごと、または予約ごとにメッセージを追跡していますか?私の特定の使用の場合は

、私だけではなくによって、メッセージがすべて加入者によって処理されるすべての/ 1加入を望みます。これはトピックですべて可能ですか?

答えて

3

メッセージの重複は、単一の競合、消費者によって処理されることを意図されています。さもなければそれはメッセージ重複と考えられるでしょう。

同じ論理サブスクライバの複数のインスタンスに同じメッセージを送信する必要がある場合、各サブスクライバには独自のサブスクリプションキューがあり、デフォルトのフィルタが必要です。

たとえば、クラウドサービスを使用する場合、CSロールのインスタンスごとにサブスクライバを作成する必要があります。各サブスクリプションキューは一意に識別可能である必要があり、一意の識別子は決定論的でなければなりません。 1つの選択肢は、CSインスタンスIDを使用することである。プロセスがスケールアウトするたびに、インスタンスIDがサブスクリプションキューに追加されます。このアプローチにも課題があります。プロセスの規模が拡大すると、未処理のメッセージが残っている可能性があります。

5

あなたの質問には既に回答していますが、利用規約(購読\加入者)に混乱があり、推奨される使用例は何ですか。

一方のエンドでメッセージを配置し、もう一方のエンドでメッセージをポップする単純なキューを考えてみましょう。これがServiceBusキューの動作です。
まだメッセージを一方の端に置いているキューを考えてください。メッセージをポップすることができる複数の端に分割します。これはトピック(メッセージを配置する場所)とサブスクリプション(メッセージをポップする場所)について説明します。

トピック\サブスクリプションでは、トピック内のメッセージはで、サブスクリプションにはがコピーされています。したがって、各サブスクリプションは他のサブスクリプションから独立していますそれはキューの別のコピーのようなものです。

今、サブスクリプションからメッセージを受信して​​いるクライアントアプリケーションは、サブスクライバーと呼ばれています。各クライアント(サブスクライバ)は、1つのサブスクリプションに接続するためのものです。この場合、サブスクライバはメッセージを競合せず、各サブスクライバは他のサブスクライバと同じメッセージを処理できます。

一方、同じサブスクリプションに接続する多数のクライアントアプリケーション(サブスクライバ)がある場合、それらは当然すべて同じメッセージを競合します。

幸いなことに、これはあなたが得た回答(矛盾しているように見えますが、実際には同じ用語を別々に使います)を説明してください。最後に、ServiceBusで両方のシナリオを実行できます。

関連する問題