Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.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服务总线Azure函数触发并获取所有消息_C#_Azure_Azure Functions_Azureservicebus - Fatal编程技术网

C# Azure服务总线Azure函数触发并获取所有消息

C# Azure服务总线Azure函数触发并获取所有消息,c#,azure,azure-functions,azureservicebus,C#,Azure,Azure Functions,Azureservicebus,我有一个队列,里面有很多高频数据。我有一个azure函数,当新消息写入时会触发该函数,并将消息写入azure sql数据库。我的问题是有太多的消息要写,所以我想做的是“累积”消息,然后一次将它们全部写入数据库。我在Azure function service bus集成中没有看到任何获取所有(或x)消息并处理它们的功能 这样的事情可能吗 非常感谢您的帮助。我只是想知道您为什么需要批量插入。Azure正在为触发您的函数的每一条消息创建一个新的函数实例;所以性能在这里不是问题。 如果仍要执行批处理,

我有一个队列,里面有很多高频数据。我有一个azure函数,当新消息写入时会触发该函数,并将消息写入azure sql数据库。我的问题是有太多的消息要写,所以我想做的是“累积”消息,然后一次将它们全部写入数据库。我在Azure function service bus集成中没有看到任何获取所有(或x)消息并处理它们的功能

这样的事情可能吗


非常感谢您的帮助。

我只是想知道您为什么需要批量插入。Azure正在为触发您的函数的每一条消息创建一个新的函数实例;所以性能在这里不是问题。 如果仍要执行批处理,可以将传入消息临时存储在代理Azure数据库/数据存储中,并在指定的时间段内查询该代理,然后运行批插入命令。
请记住,成功插入批处理后,您必须删除查询的记录。

Azure Functions runtime会批量检索和处理队列消息。默认batchSize为16,最大batchSize为32。可以通过在函数App的host.json文件中提及batchSize来为“队列”触发器配置此值。

“队列”触发器的配置设置

"queues": {
  "maxPollingInterval": 2000,
  "visibilityTimeout" : "00:00:10",
  "batchSize": 16,
  "maxDequeueCount": 5,
  "newBatchThreshold": 8
}

到目前为止,我解决这个问题的方法是避免服务总线触发器,因为它涉及到函数对每条消息执行一个实例。我每10秒执行一次时间触发器,并使用从订阅客户端接收的方法

实际上,在这种情况下,您需要手动引入Azure服务总线库,创建所需的类并调用Receive方法,您可以告诉它您需要多少项。请遵循ASB类(TopicClient和SubscriptionClient)应设置为单例的最佳实践,因为它们是昂贵的对象


我还必须累积消息来对它们进行排序和重复数据消除,所以我就是这样解决的。然而,从Azure功能扩展中获得这种开箱即用的功能将是非常酷的。

从的4.1.0版开始,批处理确实得到了支持:

您正在寻找批处理,但它目前不受支持。有一个公开的github问题要求提供该功能:而且,您可能永远不会看到“get all”变体——因为SB将队列划分到多个队列实例的方式,Azure本身永远无法准确地知道排队等待传递的消息的“真实”数量(例如,当它从分区#3获取计数时,有人可能会写入已计数的分区#1)。此外,为了防止您遇到它,SB队列函数相当混乱地将多个实例称为“批处理”…请参阅答案。此答案指的是存储队列,而不是服务总线队列。我本想说Yaaayyy,但后来我看到了此注释。lol。