2016-10-04 27 views

回答

2

如果您有一條已發送但未完成的消息,則一旦LockDuration過期並再次消耗,則預期消息將顯示在隊列中。你有來完成信息。如果你不這樣做,它最終會進入DLQ,但在此之前你的消費者會多次接收它。

QueueClient.Receive獲取代理(服務器)上可用的所有內容。我沒有遵循循環賽傳遞的想法,因爲它是一個隊列。你會得到什麼排隊。作爲一個經驗法則,我建議不要依賴消息的順序

這樣說,有一個ASB會話功能可以保留和保證訂單的交付。如果你正在尋找會議,之前詢問similar question

0

當您創建QueueClient您可以指定接收模式,並將其設置爲ReceiveAndDelete

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

這將使你儘快從隊列中刪除該郵件,你收到它,而不必調用Complete

如果你不叫Complete或使用ReceiveAndDelete,順序將是:

  • 中獲取信息(鎖定它的X秒)
  • 會按順序下一條消息(鎖定它X秒)
  • 第一個消息鎖定已過期,所以您再次獲取並重新鎖定它。
  • 永遠等於第二條消息等等。
+0

然後它會從頂部一遍又一遍地得到一些消息。但有多少呢? –

+0

@GökhanKurt不知道我理解你的問題。 –

+0

我從答案中瞭解到,它會鎖定最頂端的幾個並鎖定它們(在您的示例中爲2)。然後當鎖定過期時,它會再次嘗試這兩個。假設2項只是一個例子,它會鎖定和嘗試多少?或者它會鎖定最上面的一個並等到鎖定過期?或者它可能會嘗試從頂部的每個項目,直到鎖再次從頭開始的最頂部的鎖到期。 –

相關問題