2016-10-04 7 views
0

QueueClient.Receive()はどの順序でメッセージを配信しますか? 私はいくつかのテストを実行していますが、あなたがComplete()をしなければ、いくつかのメッセージ(私が推測するもの)の何点かが何度も何度も繰り返し提供されています。 強制的にラウンドロビン方式で配信する方法はありますか?QueueClient.Receive()によって配信されるメッセージの順序は何ですか。

答えて

2

配信されたが完了していないメッセージがある場合は、LockDurationが期限切れになって再び消費されると、メッセージがキューに表示されることが予想されます。 にはがあります。そうしないと、最終的にDLQに入りますが、その前に消費者は複数回DLQを受信します。

QueueClient.Receiveは、ブローカー(サーバー)で使用できるものをすべて取得します。キューに入っているので、私はラウンドロビンの配信のアイデアに従っていません。あなたは待ち行列に入っているものを手に入れます。経験則として、私はにメッセージの順序に頼らないことを提案します。

と言うと、配信の順序を保持し保証できるASBセッション機能があります。あなたがセッションを探している場合には、前にsimilar questionが尋ねられました。あなたがコールするのではなく、それを受け取るとこれは、すぐにキューからメッセージを削除することができるようになります

QueueClient.CreateFromConnectionString(connectionString, path, ReceiveMode.ReceiveAndDelete); 

0

あなたが作成するときQueueClientあなたは、受信モードとReceiveAndDeleteに設定を指定することができますComplete。あなたがCompleteを呼び出すか、ReceiveAndDeleteを使用しない場合は

、順序は次のようになります。

  • は、メッセージ(X秒のためにそれをロック)
  • を取得Xのためにそれをロックする(順に次のメッセージを取得します。秒)
  • 最初のメッセージロックが期限切れになったため、再度取得して再ロックします。
  • 2番目のメッセージと同じように続きます。
+0

次に、上部からいくつかのメッセージが何度も繰り返し得られます。しかし、どれくらいですか? –

+0

@GökhanKurt私はあなたの質問を理解しているかわかりません。 –

+0

私は答えから理解すると、一番上のもののいくつかをロックし、それらをロックします(あなたの例では2つ)。その後、ロックが切れたときに、ロックを解除します。 2つのアイテムが単なる例であると仮定すると、ロックして試してみるといくつでしょうか?それとも、ロックを解除してロックが切れるまで待ちますか?または、ロックが最初から最後まで繰り返される最上位のものが期限切れになるまで、すべての項目を上から試してみることもできます。 –

関連する問題