我对Azure队列,功能和工作人员的功能有一些疑问。我不确定这是如何工作的。
场景:
理论上,当消息被添加到q通知时,应该调用函数f-process-notification。
问题:
触发的功能是否取代了工人的需要?换句话说,每次将消息放入队列时都会调用f-process-notification。
假设我在可见超时为5分钟的队列上放置了一条消息。基本上我正在对消息进行排队,但是在5分钟过后它不应该被执行。当消息放入队列时队列是否会立即触发f-process-notification,或者当消息可见时(即将其放入队列后5分钟)它是否仅触发f-process-notification?
答案 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
祝你好运!