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

时间:2017-03-02 14:18:14

标签: visibility azure-functions azure-storage-queues

我对Azure队列,功能和工作人员的功能有一些疑问。我不确定这是如何工作的。

场景:

  • q-notifications是Azure存储帐户中的一个队列。
  • f-process-notification是Azure中绑定到q通知的函数。它的工作是获取队列中的第一条消息并进行处理。

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

问题:

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

  2. 假设我在可见超时为5分钟的队列上放置了一条消息。基本上我正在对消息进行排队,但是在5分钟过后它不应该被执行。当消息放入队列时队列是否会立即触发f-process-notification,或者当消息可见时(即将其放入队列后5分钟)它是否仅触发f-process-notification?

2 个答案:

答案 0 :(得分:4)

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

关于横向扩展 - 当您的功能应用程序的N个实例正在运行时,它们将协作处理队列。每个队列侦听器将独立地从队列中提取批量消息以进行处理。实际上,工作将在N个实例之间进行负载平衡。正是你想要的:Azure Functions在幕后为你实现了多个消费者/工人模式的所有复杂性。

答案 1 :(得分:0)

我通常使用侦听器逻辑而不是触发器。消费者不断监视队列中的消息。如果您有多个使用者,例如处理相同总线/队列的不同Azure工作者角色中的5个消费代码实例,则获得该消息的第一个消费者获胜(他们“竞争”)。这提供了SOA架构中常见的扩展方案。

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

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

祝你好运!