可恢复的Azure Web作业(不要从队列中删除)

时间:2014-05-18 22:35:12

标签: c# azure azure-webjobs

在Azure Web作业中,您可以在连续运行的作业中使用Azure队列触发的功能。

当从队列中读取消息时,它将被删除。

但是如果由于某种原因我的Job崩溃(想想VM重启),那么未完成的当前Job将崩溃,我将丢失消息中的信息。

是否可以将Azure Web作业配置为不自动从队列中删除消息,并在作业完成后手动执行此操作?

1 个答案:

答案 0 :(得分:3)

有两种情况:

  1. 函数失败,因为消息错误而我们无法绑定它 - 例如,您绑定到Person对象但消息正文是无效的JSON。在这种情况下,我们从队列中删除消息。我们将在未来的版本中使用一种处理有害消息的机制。 (related question
  2. 函数失败,因为绑定了消息后抛出了异常 - 例如,您自己的代码抛出异常。每当我们从队列中获取消息时(除了#1),我们设置租约,我认为,10分钟:
    • 如果该功能在10分钟后仍然运行,我们续订租约。
    • 如果该功能完成,则会删除该消息。
    • 如果函数因任何原因抛出,我们将消息留在那里,不再续订租约。在租约到期后(最多10分钟),该消息将再次显示在队列中。
  3. 您的问题的答案是,如果VM重新启动,您将遇到#2,并且该消息应该在最多10分钟之后再次显示。