Azure 队列 - 功能 - 消息可见性 - 工人?

Azure Queues - Functions - Message Visibility - Workers?

我对 Azure 队列、函数和工作器的功能有一些疑问。我不太确定这是如何工作的。

场景:

理论上当消息添加到q-notifications时,应该调用函数f-process-notification。

问题:

  1. 触发功能是否取代了对工人的需求?换句话说,就是每次有消息放入队列时都会调用f-process-notification。

  2. 假设我在队列中放置了一条可见性超时为 5 分钟的消息。基本上我正在排队消息,但在 5 分钟过去之前不应对其采取行动。队列是在消息放入队列时立即触发f-process-notification,还是仅在消息可见时触发f-process-notification,即在放入队列后5分钟?

我通常使用侦听器逻辑而不是触发器。消费者不断地监视队列中的消息。如果您有多个消费者,例如不同 Azure 工作者角色中的 5 个消费代码实例处理相同的 bus/queue,第一个获得消息的消费者获胜(他们是 "competing")。这提供了 SOA 架构中常见的扩展场景..

本文介绍了一些延迟处理的方法。

http://markheath.net/post/defer-processing-azure-service-bus-message

祝你好运!

在 Azure Functions 中,每个 Function App 实例 运行 您的队列触发函数将有自己的目标队列侦听器。它使用指数退避策略监视新工作队列。当新项目添加到队列时,侦听器将从队列中拉出多个项目(批处理行为是可配置的),然后 并行 分派给您的函数。如果您的功能成功,消息将被删除,否则它将保留在队列中以待重新处理。回答您的问题 - 是的,我们尊重您指定的任何 可见性超时。如果添加的消息有 5 分钟的超时时间,它将仅在 5 分钟之后处理。

关于横向扩展 - 当您的 Function App 的 N 个实例是 运行 时,它们都会合作处理队列。每个队列侦听器将独立地从队列中拉出成批的消息进行处理。实际上,工作将在 N 个实例之间进行负载平衡。正是您想要的:) Azure Functions 正在幕后为您实现多重 consumer/worker 模式的所有复杂性。