使用服务总线队列中的批量消息而不是为每条消息触发它的方法

Way to consume bulk messages from Service Bus Queue instead of triggering it for each message

我们有一个服务总线队列;我们正在考虑通过 Azure 函数中的服务总线队列触发器来处理消息。但是我们希望(在循环中)消费批量消息,而不是为每条消息重新触发 Function App。实现此目的的方法应该是什么以及使用哪个处理程序。应该仅使用 Azure Function,还是我们可以托管一个应用服务来使用它。

您可以使用 IAsyncCoollector:

循环显示多条消息
for (var i = 0; i < 10; i++)
{
   var message = new ServiceBusMessage($"Message #{i}");
   await collector.AddAsync(serviceBusMessage);
}

这适用于 in-Process SDK。实现基于您在使用 Functions 发送多条消息时使用的 SDK。 请参阅此 blog 了解更多信息。

Official doc of Service Bus Binding host.json 到 Azure Functions 的批处理配置显示了发送和接收批处理消息所需的配置。

请参阅此 GitHub 问题 (Issue 921),其中包含 Azure Functions 服务总线绑定中出现的问题的少数解决方案。

你应该使用批处理。只需将变量声明为数组即可。

public static class ProcessOrders
{
    [FunctionName("ProcessOrders")]
    public static void Run(
        [ServiceBusTrigger("orders", Connection = "ServiceBusConnection")]
        Message[] orders, // <-- array
        ILogger log)
    {
        log.LogInformation($"Number of orders: {orders.Length}");
    }
}

您可以使用 host.json 文件进一步配置 batch size 等。