Azure WebJob Service Bus在队列出错时重新排队消息

时间:2017-09-27 11:57:18

标签: c# azure azure-webjobs azureservicebus servicebus

我有一个WebJob从服务总线获取消息,工作正常。如果webjob无法完成或抛出异常,则消息将在队列中发回,这本身就很好。

我已将MaxDequeueCount设置为10,如果在某些情况下失败则不会出现问题,因为它会尝试再次处理它。但问题是消息似乎被发送到队列的底部,并且在我们返回到第一个失败的消息之前处理其他消息。

我想一次处理一条消息,因为我可能会对连续出现的同一个实体进行多次更新。如果订单发生变化,它将以错误的顺序更新实体。

是否可以在出错时将消息发送回队列的正面或继续处理同一消息,直到我们到达MaxDequeueCount?

1 个答案:

答案 0 :(得分:0)

理想情况下,您不应该依赖邮件订单。

根据您的要求,您可能会使用Azure Service Bus Sessions的FIFO语义。当在会话中处理消息并且消息中止时,将再次处理该消息而不是到达队列的末尾。你需要记住以下几点:

  1. 一次只能处理一条消息
  2. 需要使用会话
  3. 如果消息未完成未中止,则会在队列中挂起,并在重新启动会话时接听。