1

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

从队列中读取消息后,将其删除。

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

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

4

1 回答 1

3

有两种情况:

  1. 该函数失败,因为消息是错误的,我们无法绑定它- 例如,您绑定到一个 Person 对象,但消息正文是无效的 JSON。在这种情况下,我们从队列中删除消息。我们将在未来的版本中提供一种处理有害消息的机制。(相关问题
  2. 函数失败是因为在消息绑定后抛出了异常——例如,你自己的代码抛出了异常。每当我们从队列中收到消息时(除了第 1 种情况),我认为我们设置了 10 分钟的租约:
    • 如果该功能在 10 分钟后仍然运行,我们更新租约。
    • 如果该功能完成,则删除该消息。
    • 如果函数因任何原因抛出,我们将消息留在那里并且不再续订租约。租用时间到期(最多 10 分钟)后,该消息将再次出现在队列中。

回答您的问题,如果 VM 重新启动,您是第 2 种情况,并且该消息应在最多 10 分钟后再次显示。

于 2014-05-19T02:03:30.157 回答