为什么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/