放弃服务总线中的消息是否需要未过期的锁定令牌?

问题描述 投票:0回答:1

我正在使用 C# Azure.Messaging.ServiceBus SDK。

文档提到如果消息锁已过期将抛出 ServiceBusException - https://learn.microsoft.com/en-us/dotnet/api/azure.messaging.servicebus.servicebusreceiver.abandonmessageasync?view=azure-点网#exceptions

在我的测试中,队列的锁定持续时间为 60 秒。在我的消息处理代码中,我引入了 70 秒的人为延迟,然后放弃消息。这似乎是成功的,因为没有抛出异常。

注意,我已经将

MaxAutoLockRenewalDuration
设置为零,所以锁确实是过期了,并没有被更新。

这让我相信过期的令牌可以用来调用 Abandon 方法,这与文档相反。

c# azure azureservicebus
1个回答
0
投票

在 Azure 服务总线系统中,放弃消息需要使用有效且未过期的锁定令牌,该令牌允许管理特定消息的锁定。 'Azure.Messaging.ServiceBus' SDK 文档清楚地说明了它在成功放弃消息方面的重要性,因此在执行这些操作时始终拥有此类令牌非常重要。

通常,通过 'Abandon' 方法使用过期令牌会导致异常,因为关联的锁会提前过期。然而,特定场景或其他应用程序行为可能允许用户在调用此函数时仍然使用此类令牌而不会报告错误。

尽管在测试阶段看似运行良好;偏离官方指南会损害您的代码的预期行为和对最佳实践的遵守,因此在调用放弃时只需要满足功能和未过期的令牌。仔细查看您的代码实现可能值得考虑。

用细齿梳梳理一下并确保不存在任何可能的问题可能是有益的。此外,在进一步调用 'Abandon' 方法之前,重要的是要验证正在使用的锁定令牌是否合法且尚未过期。

© www.soinside.com 2019 - 2024. All rights reserved.