在锁定持续时间到期后,我无法续订锁吗?使用Azure Service Bus主题

时间:2014-06-04 06:27:20

标签: c# azure azureservicebus azure-servicebus-queues

使用Azure Service Bus主题

例如5分钟后如果尝试更新锁定,则表示Lock已过期消息!!

有什么其他选择来实现..

我的交易时间超过5分钟,之后我想将代理消息状态设置为已完成。

任何选项?

2 个答案:

答案 0 :(得分:4)

要添加到Sam的答案,如果锁定持续时间已过,则无法续订该消息的锁定。一旦锁定到期,该消息就可以分发给另一个消费者。这意味着如果您在锁定过期后被允许调用续订锁定,则其他人可能正在处理该消息,就服务总线而言,它已被其他消费者锁定。可以说,RenewLock会检查消息是否已经再次发出并且如果没有更新,那将是“很高兴”,但它不会这样做。如果你有足够的消费者,并且消息大致处理完毕,那么消息很可能已经消失了。

如果您的工作单元占用时间超过5分钟,则需要在处理期间或单独的线程上管理续订。例如,如果您的处理是您做某些工作并且控制流程经常返回到您的代码,则处理线程可以密切关注时间量并在必要时进行更新;但是,您的处理线程更可能是繁忙的,在这种情况下,您希望有一个单独的线程来处理续订。

您可能会查看系统正在处理的内容,并查看是否可以将其拆分为较小的工作块并分布在一系列队列中。

答案 1 :(得分:2)

您可以使用此处记录的RenewLock()方法:http://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.brokeredmessage.renewlock.aspx

QueueClient queueClient = QueueClient.CreateFromConnectionString(serviceBusConnectionString, queueName);
BrokeredMessage receivedMessage = await queueClient.ReceiveAsync();
await receivedMessage.RenewLockAsync();

您还可以查看本文,了解如何使用Service Bus实现可靠的消息传递循环:http://msdn.microsoft.com/en-us/library/hh851750.aspx