我试图使用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
有没有更新?你解决了这个问题吗? –