Azure服务总线Azure功能触发并获取所有消息

时间:2018-03-28 11:28:47

标签: c# azure azure-functions azureservicebus

我有一个队列,其中放入了大量高频数据。我有一个azure函数,它会在新消息写入它时触发并将消息写入Azure sql数据库。我的问题是有太多的消息要写,所以我想做的就是"积累"消息然后将它们全部写入数据库。我没有在Azure功能服务总线集成中看到任何类型的功能来获取所有(或x)消息并处理它们。

这种情况有可能吗?

感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

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

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

我还必须积累邮件来对它们进行排序和重复数据删除,因此这就是我解决的方法。但是,从Azure Functions扩展中立即使用这种功能非常酷。

答案 1 :(得分:0)

Azure Functions运行时将批量检索和处理队列消息。默认的batchSize为16,最大batchSize为32。可以通过在Function App的host.json文件中提及batchSize来为“队列”触发器进行配置。 Refer to know more on host.json

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

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

答案 2 :(得分:0)

答案 3 :(得分:-1)

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