我試圖使用ServiceBus訂閱的MaxDeliveryCount來實現消息處理的重試。不確定這是最好的主意,但不想丟失消息。使用MaxDeliveryCount Azure ServiceBus消息進行重新處理
場景:
- 有一個主題,與兩個訂戶一個發送(A)和其他 (B)接收消息,使用皮克鎖
- 兩個訂閱已經配置MaxDeliveryCount = 10
- 兩個客戶機使用 SubscriptionClient.ReceiveBatch(50,TimeSpan.FromMilliseconds(50))到 從隊列
- 甲獲得消息發送5個消息,具有有效載荷 「1」, 「2」,... 「5」 條
第一消息(「1」)未能在乙處理和其放棄的被標記(BrokeredMessage.Abandon())
原因:內部原因,應用程序無法處理現在該消息。
它沒有因爲DeliveryCount < MaxDeliveryCount)
- 下一頁BlackLettered,因爲「1」以前失敗的消息時,只有一個消息是 距離要求,並且它預計將信息「1」 SubscriptionClient.ReceiveBatch( 1,TimeSpan.FromMilliseconds(50))
- 經過2-3次重複的步驟7,代替接收消息「1」,接收到消息「2」 消息「2」也被標記爲放棄 ,因爲消息「1 「預計
然後收到消息「3」
由於消息「1」爲 ,因此消息「3」也被標記爲廢棄等等。
看來,在這種情況下,SB以循環方式發送消息。
這是ServiceBus的預期行爲嗎?
我知道SB是否保證有序交付,是否存在一些爭議。對於應用程序來說,按照發送順序處理消息非常重要。
任何想法如何處理消息「2」之前可以執行消息「1」的重新處理,直到DeliveryCount達到MaxDeliveryCount之前?
看來,這種行爲與預取有關! https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-performance-improvements:「如果客戶端啓動接收操作並且緩存中包含消息,則會發送消息從緩存中。「 –
你見過這篇文章:http://stackoverflow.com/questions/28702033/how-to-accomplish-fifo-with-azure-service-bus-topics? – Thomas
有沒有更新?你解決了這個問題嗎? –