【发布时间】:2016-08-21 03:18:51
【问题描述】:
我正在使用 Azure WebJobs 轮询队列,然后处理消息。
部分消息处理包括对第 3 方 HTTP 端点的命中。 (例如天气 api 或一些股票市场 api)。
现在,如果对 api 的访问失败(网络错误、500 错误等),我会尝试/在我的代码中捕获它,记录任何内容,然后......什么??
如果我继续......那么我假设该消息将被 WebJobs SDK 删除。
我该怎么做:
1) 对 SDK 说 - 请不要删除此消息(因此它将在下一次队列轮询时自动重试并且当消息再次可见时)。
2) 设置隐身时间值,当SDK从队列中弹出消息进行处理时。
谢谢!
【问题讨论】:
-
根据azure.microsoft.com/en-in/documentation/articles/…此处发布的内容,我相信如果您的函数抛出错误,该消息不会被删除。您可以通过记录异常然后重新抛出该异常来尝试吗?
-
假设您不继续/处理错误但允许它失败 - 如果您的请求失败超过 5 次 - 消息被推入另一个队列,称为
posion-{{your_queue_name}}- 您可以编写侦听此队列以处理失败消息的侦听器。请澄清你所说的隐形价值是什么意思?你的意思是锁。 -
@JS_GodBlessAll 阅读文档,
5是重试次数的默认值,但可配置。如果我们将此值设置为一个非常高的数字,那么消息将不会移动到毒队列(请参阅Manual poison message handling部分)。我说的对吗? -
@GauravMantri:当我使用 SDK 版本(3 个月前)时,我不确定是否配置重试,但它并没有让我这样做。但是我可以配置并且确实配置了 1) 轮询间隔 2) 和允许出队的消息数量 - 这就是我所做的。可能是较新的版本也可以让您配置故障
-
还有@GauravMantri 和@Pure.Krome - 我相信(依稀记得)添加另一个 dll 来实现相同的效果 - 这可能适用于 CRON 作业 - 但不确定,这些值也被限制在最大值价值 - 隐藏在文档中的某个地方。
标签: azure azure-webjobs