不会从 Azure 服务总线订阅中删除消息



正在使用 Azure 服务总线消息传送,因为我遇到了一些奇怪的问题。

我创建了一个具有"Peeklock"模式的订阅客户端。 使用 SubscriptionClient.ReceiveBatch(500) 方法并收到"n"条消息。然后循环这些消息并执行我的进程,如果我的进程成功完成,则使用 BrokeredMessage.Complete() 从队列中删除该消息。如果该过程中有任何问题,请使用 BrokeredMessage.Abandon() 来更新消息。但消息不会从队列中删除。

经过一些分析,我怀疑我的进程需要更多时间,并且消息锁在进程完成之前就过期了。

然后我决定,在收到来自队列的消息后,我将这些消息推送到本地字符串数组中,然后调用 BrokeredMessage.Complete()。 因此,锁定不可能过期。 但消息仍然不会从队列中删除。

请给出一些解决此问题的想法。

*

BrokeredMessage.Abandon() 来更新消息。但消息是 未从队列中删除。

*

放弃不会放弃信息。 它放弃了锁。

https://learn.microsoft.com/en-us/dotnet/api/microsoft.servicebus.messaging.brokeredmessage.abandon?view=azureservicebus-4.0.0#Microsoft_ServiceBus_Messaging_BrokeredMessage_Abandon

放弃对窥视锁定邮件的锁定。

放弃肯定会允许消息在以后重新可用。

叫。完成以将消息从队列中移除。

而且你必须小心,正如你所建议的那样...关于获取 N(在您的情况下为 500)消息...并且无法在锁定机制生效之前完成(全部)它们。

这里有一些想法。

http://markheath.net/post/defer-processing-azure-service-bus-message

这可能是我见过的最好的想法,但是,它是一条消息。

http://dotnetartisan.in/2016/01/24/avoiding-messagelocklostexception-using-auto-renew-pattern-for-brokeredmessage-service-bus-queue/

最新更新