【问题标题】:Azure Function and storage queueAzure 函数和存储队列
【发布时间】:2019-08-17 07:25:49
【问题描述】:

我尝试使用带有 azure 功能的 Azure 存储队列,我认为它非常简单 - 从队列中获取消息,处理,必要时添加新的。但是现在我弄得一团糟,在我的函数处理当前消息期间读取的消息(我有很长的过程),有时我看到队列中的消息,这些消息是很久以前处理的。

Azure 函数的任何说法:

  1. 获取消息并从队列中删除
  2. 正在处理消息
  3. 如果成功 - 什么也没发生,如果失败(异常) - 读取当前。

仅此而已。没有任何复杂的逻辑。有可能吗?

【问题讨论】:

  • 您的“长流程”运行了多长时间?默认情况下,函数会在 5 分钟后超时。
  • @JohnHoerr 可以超过 5 分钟。我可以扩展这个值吗?
  • 是的,你可以做到这一切,这是非常多的功能。默认为 5 分钟,您可以将其延长至 10 分钟。
  • @ImranArshad 怎么办?

标签: azure queue azure-storage azure-functions message-queue


【解决方案1】:

基于上面的cmets

您的函数由服务总线中的消息触发。您处理消息。如果您在给定的执行时间(默认为 5 分钟)内满意并完成,则消息被标记为已完成。如果不满意,抛出异常。该函数将认为消息未完成并放弃它,因此它重新出现在队列中,但是您的重试计数将继续增长,直到达到最大值,然后将消息发送到死信队列。

需要注意的几点

如果你不抛出异常并且进程自己处理它(由于一些处理错误)它仍然认为它被放弃了消息并会重试。但是,如果函数成功执行而没有抛出任何错误,但结果不是你想要的,那么就抛出你自己。

还在服务总线中增加锁定时间以匹配您的函数的处理时间。例如功能需要 5 分钟才能完成,但是您的服务总线中的消息锁定时间是 30 秒,消息将重新出现在消息队列中,而另一个消息副本仍在由函数处理。因此,增加您认为足以使功能完成该过程的服务总线消息锁定时间。

【讨论】:

    猜你喜欢
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 2021-07-07
    • 2019-05-07
    • 2019-08-17
    • 2019-04-18
    相关资源
    最近更新 更多