首页 > 解决方案 > Azure 服务总线队列 - 由于对象的当前状态,操作无效

问题描述

我在我的一个 .net 核心应用程序中使用 Azure 服务总线队列以 FIFO 顺序从队列接收消息。一旦收到来自队列的消息,我就处理了每条消息的业务逻辑。处理完每条消息的业务逻辑后,我将尝试使用以下代码行从队列中删除消息:

await _messageReceiver.CompleteAsync(message.SystemProperties.LockToken);

但是对于少数消息,我无法从队列中删除消息。因为即使我在服务总线队列上配置了“锁定持续时间”3 分钟,对消息的锁定也已过期。

从服务总线队列中删除/完成消息时出现以下错误:

异常类型:System.InvalidOperationException

异常消息:由于对象的当前状态,操作无效。

这些是我在 Azure 服务总线队列上配置的属性:

Max Delivery Count =1
Lock Duration=3 minutes

标签: azureasp.net-core-2.0azure-servicebus-queuesdead-letter

解决方案


无法删除 Azure 服务总线队列中的消息有几个原因。

锁定持续时间的挑战

第一个挑战是时间,特别是在每条消息被检索后锁定持续时间。问题是消息必须显示在 UI 中,然后为客户提供时间来选择要重新提交或删除的消息。解决方案是要求客户增加锁定持续时间,但由于多种原因,这是不可能的。首先,由于客户集成,增加锁定持续时间可能是不可能的,所以我们不能依赖它。

阅读这篇关于如何克服挑战的博文的更多信息。


推荐阅读