Azure服务总线触发器未同时处理基于会话的队列



我有一个Azure函数,它在会话启用队列上触发,定义如下

[ServiceBusTrigger("QueueName", Connection = "ServicebusConnectionString",
IsSessionsEnabled = true)] string queueItem)

我的问题是,该函数一次只处理一条消息。正因为如此,完成一个会话所需的时间比必要的要长得多。如何使函数同时处理消息?

我目前依赖默认值来配置触发器,我的host.json中没有明确设置任何值。

我使用的是最新版本的Azure函数,带有独立模型:https://github.com/Azure/azure-functions-dotnet-worker

我的问题是该函数一次只处理一条消息。正因为如此,完成一个会话所需的时间比必要的要长得多。如何使函数同时处理消息?

这是故意的。服务总线会话只能由单个使用者处理,以确保消息排序。如果您需要同时处理消息,并且可以进行无序处理,则可以使用非会话队列。

但是,如果您希望加快处理速度,那么批处理可能会有所帮助。触发器将被提供多条消息,而不仅仅是一条消息。

public static Task Run(
[ServiceBusTrigger("topic", "subscription", IsBatched = true)] string[] messages,
FunctionContext context)
{
// your code
}

Isolated Worker SDK配置显示如何配置最大

不过,我不确定您是否可以混合会话和批次。

我认为另一种选择可能是同时使用会话+分区队列/主题来加快有序处理

有用的文档:

https://www.youtube.com/watch?v=BmatDG4yEgI&ab_channel=CiaranO%27Donnellhttps://azure.microsoft.com/en-gb/blog/partitioned-service-bus-queues-and-topics/

最新更新