c# - Azure ServiceBus - 多次读取同一消息
问题描述
我们在多次读取来自 Azure ServiceBus 的消息时遇到了一些问题。以前我们有同样的问题,结果是由于锁定超时。然后,随着锁超时,消息被再次读取,并且每次读取消息时它们的deliveryCount 增加1。在此之后,我们将最大传递计数设置为 1 以避免重新发送消息,并将锁定超时时间增加到 5 分钟。
当前的问题要奇怪得多。
首先,在 10:45:34 读取消息。消息锁设置为 10:50:34,deliveryCount 为 1。读数显示成功,时间为 10:45:35.0。到目前为止一切都很好。
但随后,在 10:45:35.8,再次阅读了相同的消息!而且delivery count还是1。两个receive log中的sequence number和message id都是一样的。这种情况发生在非常小比例的消息中,例如 0.02% 的消息。
据我了解,读取消息应该导致成功删除消息,或者增加deliveryCount,在我的情况下应该将消息发送到DLQ。在这些情况下,两者都不会发生。
我正在使用 ServiceBusTrigger,如下所示:
[FunctionName(nameof(ReceiveMessages))]
public async Task Run([ServiceBusTrigger(queueName: "%QueueName%", Connection = "ServiceBusConnectionString")]
string[] messages,
这似乎是服务总线或库中的一个错误,有什么想法吗?
解决方案
那不是 SDK,而是特定实体。听起来实体已损坏。删除并重新创建它。如果这没有帮助,请打开支持案例。
另一方面,在大多数情况下,将交付计数设置为 1 表示某些事情发生了变化。如果您确实需要最多一次交付保证,请使用ReceiveAndDelete
mode 而不是PeekLock
.
推荐阅读
- swift - 应用内购买成功(.purchased),函数被调用但变量不保持其新值
- ocaml - 为什么 if 语句会出现 Ocaml 语法错误?
- reactjs - 如何测试期望 e: React.ChangeEvent 的函数
作为参数? - python - 具有来自其他表的多个外键的 SQLalchemy 表
- solidity - Solidity TypeError:此类型仅在新的实验性 ABI 编码器中支持
- javascript - 如何显示数组javascript中的复选框值
- mysql - 在 MySQL 中启动时重置的临时变量
- ios - iPhone弹出框上的导航栏
- php - Symfony 伪造者关系
- c++ - Boost ASIO Async_receive 崩溃程序