c# - Azure 服务总线触发器不同时处理基于 session 的队列

标签 c# azure azure-functions azureservicebus azure-servicebus-queues

我有一个在启用 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/

相关文章:

azure - 如何在澳大利亚注册 Azure?

azure - 如何知道 Azure 存储帐户的容量有多大?

performance - Azure 流分析太慢 - 时间值也无关紧要

Azure 逻辑应用步骤失败并出现错误 "BadRequest. Http request failed: the timeout was reached"

javascript - 在azure函数NodeJs Http触发器中获取请求 header

c# - C#中的常量字段成员

c# - MemoryStream输出到文件c#

azure - 如何在 AzureFunction V2 上的 ServiceBus BrokeredMessage 级别放弃消息或死信消息?

c# - 如何创建 ValueTuple 列表?

c# - Linq 中的多个聚合级别