我有一个在启用 session 的队列上触发的 Azure 函数,定义如下
[ServiceBusTrigger("QueueName", Connection = "ServicebusConnectionString",
IsSessionsEnabled = true)] string queueItem)
我的问题是该函数一次仅处理一条消息。因此,完成一个 session 所需的时间比必要的要长得多。如何使函数同时处理消息?
我目前依赖默认值来配置触发器,我的 host.json 中没有明确设置任何内容。
我正在使用最新版本的 Azure Functions,其隔离模型为:https://github.com/Azure/azure-functions-dotnet-worker
最佳答案
My issue is that the function is only processing messages one at a time. Because of this, it takes a lot longer to finish a session than necessary. How do I make the function process messages concurrently?
这是设计使然。服务总线 session 只能由单个使用者处理,以确保消息排序。如果您需要同时处理消息并且可以进行无序处理,则可以使用非 session 队列。
但如果您希望加快处理速度,那么批处理可能会有所帮助。触发器将收到多条消息,而不仅仅是一条消息。
public static Task Run(
[ServiceBusTrigger("topic", "subscription", IsBatched = true)] string[] messages,
FunctionContext context)
{
// your code
}
孤立 worker SDK configuration显示如何配置最大值。
不过,我不确定您是否可以混合 session 和批处理。
关于c# - Azure 服务总线触发器不同时处理基于 session 的队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67626102/