2016-04-07 17 views
0

Azureサービスバスのキューからメッセージジョブを受け取るのを待っているクライアントアプリケーションがいくつかあります。単一のAzureサービスバスキューの複数のクライアント

クライアントがジョブを取得すると、他のクライアントアプリケーションでそのジョブを受信したくないということです。

すべてのクライアントが到着するメッセージの通知を受けるQueue.OnMessage()を実装している場合、2つ以上のクライアントがメッセージを受け取らないようにするにはどうすればよいですか?

+0

あなたはそれを明確にすることができますか?あなたは1人の消費者がただ1つのタイプのメッセージを受け取るべきだと尋ねますか?あなたがそれを明確にし、例を挙げれば、より良いことになります。 –

答えて

1

私の理解では、ウルの労働者の一人が待ち行列からアイテムを入手するとすぐに、構成可能な一定の時間(リース)で他の人に見えなくなります。作業者がジョブを正常に完了すると、そのアイテムを削除できることをキューに通知します。作業者が不合格になった場合、待ち行列にそのアイテムをデッドレターキューに移動するように通知することができます。作業者が死亡した場合、他の作業者のリース時間後にアイテムが表示されます。アイテムが何回配送されたかを示すアイテム(ServiceBusによって設定されたもの)があるはずです。TTL(生存時間)もあり、アイテムがデッドレターキューに自動的に移動します。

0

このようなキューを使用しないようにするには、Azure Service Busのセッション機能を使用できます。

まず、セッションアウェアキューを作成してから、次のようにする必要があります。

// Create a queue with duplicate detection 
// with a detection history window of one hour, 
// and requires sessions. 

QueueDescription rfidCheckoutQueueDescription = new QueueDescription("rfidcheckout") 
{ 

    RequiresSession = true, 

    RequiresDuplicateDetection = true, 

    DuplicateDetectionHistoryTimeWindow = new TimeSpan(0, 1, 0) 

}; 

// Create a queue that supports duplicate detection. 
namespaceMgr.CreateQueue(rfidCheckoutQueueDescription); 

セッション意識キューは、セットアップは、あなたがメッセージをSessionIdプロパティを設定し、代わりにQueueClientMessageSessionを使用してメッセージを受け取る必要があります。

Sending Messages,Receiving Messagesのコードサンプルがあります。

+0

セッションは、特定のメッセージを特定のコンシューマにルーティングしたい場合に便利です。単に負荷を分散してアイテムが一度しか処理されないようにするには、セッションを必要としないようにしてください。 – Helikaon

+0

ああ、私は質問を誤解しています。 –

関連する問題