失败的消息不会从 Azure Servicebus triggerfunction 移动到 DLQ

Failed messages are not moved to DLQ from Azure Servicebus triggerfunction

先post,乖一点。

我在 Azure 中有一个服务总线触发器。该函数按预期工作,当消息进入队列时触发。触发器的主要功能是处理消息中的数据并将它们放入另一个外部系统。但是,无法保证外部系统会接受数据,因此消息处理失败。如果发生这种情况,则会抛出异常并将消息移至死信队列 (DLQ)。定时器触发器被设置为读取 DLQ 并将失败的消息移回主队列,服务总线触发器再次退出以处理消息。

我现在的问题是失败的消息没有移到 DLQ,它就消失了。然而,这并不一致。有时它会被移到 DLQ,但大多数时候不会。

这一直有效,这周开始发生。

我已经多次测试 post 将同一条消息发送到队列中,但不一致的情况仍然存在。所以我看不出它与队列中的数据有什么关系。

我已将代码剥离为以下代码,体验相同。

有人知道会发生什么吗?我看不出它是代码中的东西,而且我还没有对 Azure 中的服务总线做任何事情,但我怀疑它可能是我忽略的一些设置。

public static void Run([ServiceBusTrigger("xxx", Connection = "xxx")] string myQueueItem, ILogger log)
{
    log.LogInformation($"C# ServiceBus queue trigger function processed message: {myQueueItem}");

    if (myQueueItem == "0")
    {
        log.LogError($"Message failed {myQueueItem}");
        throw new Exception("DLQ test");
    }

}

看起来它毕竟在我的代码中,现在它看起来像预期的那样工作。

在测试期间,我一直在从主队列中读取数据,从 DLQ 中读取数据并将 DLQ 消息重新提交回主队列。如果在代码中未正确处理消息,我一直用来接收和发送消息的 SDK 对象似乎一直在阻止消息处理:

await sender.DisposeAsync();
await receiver.DisposeAsync();
await client.DisposeAsync();

实施后,事情似乎更稳定了。