Azure 函数和存储队列

Azure Function and storage queue

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

Azure 函数的任何说法:

  1. 获取消息并从队列中删除
  2. 正在处理消息
  3. 如果成功 - 没有任何反应,如果失败(异常) - 读取当前。

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

基于以上评论

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

几点注意事项

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

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