簡體   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