【问题标题】:Time triggered Azure Function and queue processing时间触发 Azure 函数和队列处理
【发布时间】:2018-01-20 05:21:08
【问题描述】:

我有一个每天调用一次的函数来处理队列中的所有消息。但我也想拥有与队列触发器一样的重试和中毒消息逻辑。这有可能吗?

【问题讨论】:

  • 我猜你必须手动完成。为什么不直接使用队列触发器?您可以安排在 X 时间之前不处理您的消息。
  • 企业喜欢控制时间。
  • 在时间 X 之后,您将如何安排队列触发器?
  • 发送消息时可以设置initialVisibilityDelay,见this method
  • 谢谢。不幸的是,我不能将它用于批处理行为。

标签: azure azure-functions azure-queues poison-queue


【解决方案1】:

因此,此时您的功能纯粹是一个计时器触发功能,从那里您与控制台应用程序没有什么不同,您必须使用自己的客户端连接、消息循环、重试和处理来自队列的消息死字(毒)逻辑。老实说,它只是不适合这项工作的工具。

假设一种方法,如果你想有创意,你可以考虑使用 Azure 函数的内置队列触发行为,同时仍然控制队列处理的实际开始时间并通过 Azure Scheduler 之类的东西停止函数实例本身。调度函数的启动非常简单,一旦启动,它将立即开始排空队列。挑战在于知道如何阻止它。带有队列绑定的 Azure Function 运行时永远不会自行停止,因为它使用拉模型读取队列,所以它只会坐在那里等待新消息到达,对吧?因此,停止它实际上是一个了解业务需求的问题。一旦那天没有更多消息,你会停下来吗?你会在一天中的特定时间停下来吗?等等。这里没有正确的答案,它完全是特定领域的,但无论答案是什么,都将决定所采取的确切方法。

老实说,正如我之前所说,我不确定这是适合这项工作的工具。是的,很高兴你得到重试和毒物处理,但你真的违背了运行时的规律。我个人建议您考虑安排这个简单的控制台可执行文件,使用 Azure 容器实例 (some docs on that approach here) 以类似任务的方式执行。如果您指望 Azure Functions 的自动缩放,那完全可以从 Azure 容器实例中获得。

【讨论】:

  • 谢谢,我同意你的回答。我最终得到了一个队列触发器,将消息插入到 Azure 表中。时间触发器稍后会像处理任务队列一样处理它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
  • 2021-03-01
  • 2015-05-06
  • 1970-01-01
  • 2018-03-26
  • 2021-07-07
相关资源
最近更新 更多