首页 > 解决方案 > 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,

这似乎是服务总线或库中的一个错误,有什么想法吗?

标签: c#azureazureservicebusazure-webjobs

解决方案


那不是 SDK,而是特定实体。听起来实体已损坏。删除并重新创建它。如果这没有帮助,请打开支持案例。

另一方面,在大多数情况下,将交付计数设置为 1 表示某些事情发生了变化。如果您确实需要最多一次交付保证,请使用ReceiveAndDeletemode 而不是PeekLock.


推荐阅读