使用 Azure 服务总线主题
例如 5 分钟后,如果尝试更新锁,它会显示锁已过期消息!
还有什么其他选择可以克服它..
我有超过 5 分钟的事务,之后我想将代理消息状态设置为已完成。
有什么选择吗?
使用 Azure 服务总线主题
例如 5 分钟后,如果尝试更新锁,它会显示锁已过期消息!
还有什么其他选择可以克服它..
我有超过 5 分钟的事务,之后我想将代理消息状态设置为已完成。
有什么选择吗?
为了补充 Sam 的答案,如果锁定持续时间已过,您将无法更新对该消息的锁定。一旦锁过期,消息就可以分发给另一个消费者。这意味着如果您被允许在锁过期后调用更新锁,则其他人可能正在处理该消息,并且就服务总线而言,它已被该其他使用者锁定。可以说,如果 RenewLock 会检查消息是否已经再次发出,如果没有则更新,这将是一个“很好的选择”,但它不会这样做。如果您有足够的消费者并且给定消息被粗略地处理,那么消息更有可能已经在其他地方关闭。
如果您的工作单元的时间超过 5 分钟,则需要在处理期间或在单独的线程上管理续订。例如,如果您的处理是您做一些工作并且控制流经常返回到您的代码,则处理线程可以关注时间量并根据需要进行更新;但是,您的处理线程很可能会很忙,在这种情况下,您需要一个单独的线程来处理更新。
您可能会查看您的系统为处理所做的工作,看看是否可以将其分解为更小的工作块并分布在一系列队列中。
您可以使用此处记录的 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();
您还可以查看这篇关于如何使用服务总线实现可靠消息循环的文章:http: //msdn.microsoft.com/en-us/library/hh851750.aspx