我正在使用azure服务总线消息,因为我遇到了一些奇怪的问题。
我用“peeklock”模式创建了一个订阅客户端。 使用SubscriptionClient.ReceiveBatch(500)方法并收到'n'个消息。然后循环这些消息并执行我的过程,如果我的进程成功完成,则使用BrokeredMessage.Complete()从队列中删除该消息。如果在该过程中有任何问题,我使用BrokeredMessage.Abandon()来更新消息。但是消息不会从队列中删除。
经过一些分析后,我怀疑我的进程花了更多的时间,并且在进程完成之前消息锁已经过期。然后我决定,在收到队列消息后,我将这些消息推送到本地字符串数组,然后调用BrokeredMessage.Complete()。 所以没有锁定到期的可能性。 但是仍然没有从队列中删除消息。
请妥善解决此问题。
答案 0 :(得分:0)
*
BrokeredMessage.Abandon()更新消息。但消息是 没有从队列中删除。
*
放弃并没有放弃这条消息。放弃了LOCK。
放弃对隐藏锁定消息的锁定。
Abandon肯定会允许该消息在以后重新可用。
调用.Complete将消息从队列中删除。
你必须小心,因为你建议......关于获得N(在你的情况下为500)消息......并且在锁机制生效之前无法完成(全部)它们。
以下是一些想法。
http://markheath.net/post/defer-processing-azure-service-bus-message
这可能是我见过的最好的主意,但是,这只是一条消息。