繁体   English   中英

锁定时间到期后,我不能续订吗? 使用Azure Service Bus主题

[英]Can't i renew the lock after the lock duration has expired ? Using Azure Service Bus Topic

使用Azure Service Bus主题

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

还有其他解决方案吗?

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

有什么选择吗?

要补充Sam的答案,如果锁定时间已过,则无法更新该消息的锁定。 一旦锁过期,便可以将该消息分发给其他使用者。 这意味着,如果允许您在锁到期后调用更新锁,则其他人可能正在处理该消息,并且就服务总线而言,该消息已被其他使用者锁定。 可以说,RenewLock将检查消息是否已经再次分发并更新(如果不是)则是“很高兴”,但是这样做不会。 如果您有足够的使用者,并且给定消息是按顺序粗略处理的,那么该消息很可能已经在其他任何地方出现了。

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

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

您可以使用此处记录的RenewLock()方法: http : //msdn.microsoft.com/zh-cn/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/zh-cn/library/hh851750.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM