Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Azure服务总线触发器未同时处理基于会话的队列_C#_Azure_Azure Functions_Azureservicebus_Azure Servicebus Queues - Fatal编程技术网

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

C# Azure服务总线触发器未同时处理基于会话的队列,c#,azure,azure-functions,azureservicebus,azure-servicebus-queues,C#,Azure,Azure Functions,Azureservicebus,Azure Servicebus Queues,我有一个Azure函数,它在启用会话的队列上触发,定义如下 [ServiceBusTrigger("QueueName", Connection = "ServicebusConnectionString", IsSessionsEnabled = true)] string queueItem) 我的问题是该函数一次只处理一条消息。因此,完成一个会话所需的时间比需要的时间要长得多。如何使函数同时处理消息 我目前依赖于默认值来配置触发器,在我的h

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

    [ServiceBusTrigger("QueueName", Connection = "ServicebusConnectionString", IsSessionsEnabled = true)] string queueItem)
我的问题是该函数一次只处理一条消息。因此,完成一个会话所需的时间比需要的时间要长得多。如何使函数同时处理消息

我目前依赖于默认值来配置触发器,在我的host.json中没有任何显式设置

我使用的是最新版本的Azure函数和独立模型:

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

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

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

public static Task Run(
    [ServiceBusTrigger("topic", "subscription", IsBatched = true)] string[] messages,
    FunctionContext context)
{
   // your code
}
隔离工作程序SDK显示了如何配置max


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

谢谢您的回复Sean!我们的问题是,我们的客户都可以启动多个大型作业,每个作业都由多个需要处理的“块”组成。到目前为止,我们对所有块都使用一个队列,但这似乎开始成为一个瓶颈。客户机将启动一个作业,但必须等待来自其他客户机的前一个作业完成处理,然后才能访问它们。我认为会话是处理这个问题的一种方式,我们将作业ID作为会话ID分配给每个块,这样就可以并行处理多个作业了。这样就行了。可以同时处理多个会话。在给定会话中,只有一个函数实例/线程可以接收和处理来自该会话的消息。这是你所需要的,这是有道理的。我刚刚期望单个函数实例可以从会话中一次获取多条消息并同时处理它们,但也许我误解了应该如何使用基于会话的队列。处理一条消息可能需要1分钟以上,而一个作业可能包含数千条消息。如果每个作业一次只能处理一条消息,那么每个作业的处理时间将无法满足我们的需要。