Azure队列-功能-邮件可见性-工人?

God*_*ers 3 visibility azure-storage-queues azure-functions

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

场景:

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

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

问题:

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

  2. 假设我在可见性超时为5分钟的队列中放置了一条消息。基本上,我正在对消息进行排队,但是直到5分钟后才应采取行动。队列是在将消息放入队列时立即触发f-process-notification还是仅在消息变为可见时(即,将消息放入队列后5分钟)才触发f-process-notification?

mat*_*ewc 5

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

关于横向扩展-当您的Function App的N个实例正在运行时,它们将全部协同处理队列。每个队列侦听器将独立地从队列中提取成批消息以进行处理。实际上,将在N个实例之间平衡工作。正是您想要的:) Azure Functions正在幕后为您实现多重消费者/工人模式的所有复杂性。

  • 在“消耗”中,我们监视目标队列,根据队列长度,等待消息的时间等来应用启发式方法,以确定您的功能是否“保持”。如果没有,我们添加更多实例以减小队列大小。在“非消耗”中,您可以预先确定正在运行多少实例。 (2认同)