我们有一个天蓝色的功能,具有启用会话的服务总线触发器。我们正在尝试处理属于一个 sessionId 的一组消息。我们观察到该函数一次只接收一条消息。有什么方法可以让 azure 函数每隔 5 分钟接收属于会话的消息集合
public async Task Run(
[ServiceBusTrigger("<<topicname>>","<<subscriptionname>>", Connection = "<<connectionname>>", IsSessionsEnabled = true, IsBatched = true)]
ServiceBusReceivedMessage[] messages, IReadOnlyDictionary<string, object> userProperties, string sessionId)
函数触发器在主题收到消息时执行,这意味着总会有一条消息传递到函数。在这种情况下,arg IsBatched 会做什么?它是否使函数等待一段时间以便主题接收多条消息。
触发器将从总线获取尽可能多的消息(受最大批量大小的限制)。如果只有一条消息可用,它将创建一个只有一条消息的批次。所以你看到的行为是正确的。 “问题”是您发布消息的速度不够快,并且您的消费者的工作速度比您本质上发布的速度快。这通常是一件好事。
要验证这一点,请停止您的函数,发布一堆消息,然后再次启动您的函数。现在您应该会收到一批包含多个消息的批次。
没有合理的标准方法可以让函数等待,直到它可以创建特定大小的批次。