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

use*_*351 6 azure azureservicebus azure-servicebus-queues azure-functions

为什么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}");
        }
Run Code Online (Sandbox Code Playgroud)

Mik*_*kov 2

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

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

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

  • 事实并非如此。在调试过程中,触发器会在不到 5 秒的时间内再次触发。 (4认同)