Azure Web 作业、Azure 服务总线队列触发器防止消息被删除

Azure Web Jobs, Azure Service Bus Queue Trigger prevent message from getting deleted

我正在研究设置 Web 作业触发器以从服务总线队列读取消息。如果在处理下游系统时出现任何错误,实施重试逻辑的最佳做法是什么。

我们能否抛出异常,使消息不会从队列中删除,并在一定时间后重试?

感谢您的反馈。

您不需要明确定义重试逻辑。当消息从服务总线出队时,它会在一定时间段内从队列中不可见(锁定时间默认 30 秒,您可以配置它)。您尝试处理该消息,如果成功,您只需调用 BrokeredMessage.CompleteAsync,这意味着我已完成并将此消息标记为已完成。如果您在下游遇到问题,您可以通过调用 BrokeredMessage.AbandonAsync 放弃该消息。这将解锁消息,并且消息会重新出现在队列中。该消息将再次被 worker 拾取并处理。直到您成功或达到最大重试限制,之后消息将发送到死信队列。