Azure Function ServiceBusTrigger 在几毫秒内多次触发同一消息,而无需第一次完成

标签 azure azure-functions azureservicebus azure-servicebus-queues

为什么serviceBus会多次触发同一条消息? 相同的触发器由服务总线上的相同消息执行:

[FunctionName("ProcessOrderFromServiceBusQueue")]
        public static void RunQueueMessages(
            [ServiceBusTrigger("orderqueue", Connection = "ServiceBusConnectionString")]
            string myQueueItem,
            int deliveryCount,
            DateTime enqueuedTimeUtc,
            string messageId,
            long sequenceNumber,
            TraceWriter log, ExecutionContext context)
        {
            log.Info($"C# ServiceBus Queue trigger function processed message: {myQueueItem}");            

            var config = new ConfigurationBuilder()
                                .SetBasePath(context.FunctionAppDirectory)
                                .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
                                .AddEnvironmentVariables()
                                .Build();

            //var conn = config["ServiceBusConnectionString"];
            //var queueName = config["QueueName"];
            //var queueClient = new QueueClient(conn, queueName);
            //queueClient.CompleteAsync()
            log.Info($"Received Order: OrderId:{messageId} SequenceNumber:{sequenceNumber} Body:{myQueueItem}");


            // Deserialize the message body
            var order = JsonConvert.DeserializeObject<Order>(myQueueItem);

            // Process the order
            ProcessOrder(order, log, config);

            log.Info($"C# ServiceBus queue trigger function processed message: {messageId}");
        }

最佳答案

很可能您的函数主体在消息处理期间抛出异常。 Function App 中止其处理,消息返回到队列并立即再次调度,只是再次失败等等。

最后,它达到了最大传递计数并被停在死信队列中。

你能验证一下我的假设吗?例如。也打印 deliveryCount,并检查 DLQ 中的内容。

关于Azure Function ServiceBusTrigger 在几毫秒内多次触发同一消息,而无需第一次完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50766267/

相关文章:

Azure 语音文本转语音 (TTS) 失败并显示 WS_OPEN_ERROR_UNDERLYING_IO_OPEN_FAILED

Azure 数据工厂中的 XML 验证

azure - 以编程方式安排 Azure 函数的一次性执行

azure - 如何实现大尺寸图像的Azure队列?

c# - 操作未在分配的超时 00 :01:00 内完成

azure - 用于添加 Runbook 和模块的 ARM 模板

azure - 部署在 2 小时后开始过渡

超过 20 天的 Azure 函数日志

azure - 为什么 Azure Devops 管道无法连接到我的 Python/Linux 函数应用程序?

c# - Azure服务总线死信队列消息无法在死信中停留更长时间