首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法防止消息在处理Azure队列时超过dequeueCount时进入有毒队列?

有没有办法防止消息在处理Azure队列时超过dequeueCount时进入有毒队列?
EN

Stack Overflow用户
提问于 2020-07-15 03:21:51
回答 2查看 200关注 0票数 0

我让Azure函数在QueueTrigger上运行,但如果DequeueCount(最大重试次数)超过设置的限制,我希望在不向有毒队列发送消息的情况下完成该函数(但继续向有毒队列发送其他失败的消息)

我当前的函数如下所示:

代码语言:javascript
运行
复制
public async Task ProcessThis([QueueTrigger("message-queue")] Message message, string id, string popReceipt, int dequeueCount, ILogger logger)
{
   try
   {
     ...
     //process queue here
     ...
   }
   catch (Exception e)
   {
     if (dequeueCount == this._config.DequeueCount) //Currently it's set to 10
     {
       return; //If I return here, would the message still go into poison queue?
     }

     throw e;
   } 
}

我想知道,如果消息由于超过最大重试次数而失败,这是不是防止消息进入有毒队列的正确方法。

EN

回答 2

Stack Overflow用户

发布于 2020-07-16 05:14:15

如果函数没有抛出异常,Azure函数运行时会将其视为成功处理的消息,并将其从Q中删除。

如果抛出任何类型的异常,则运行时将其视为失败,并递增出队计数。如果新的计数超过maxDequeueCount,它将被移动到毒害Q. See doc

因此,如果你不想要任何东西去毒害Q,只需向你的ProcessThis()添加一个catch-all代码块并抑制异常。

票数 1
EN

Stack Overflow用户

发布于 2020-07-15 06:25:26

不确定最大队列计数是多少,但本文有一个方便的变通方法。只是

requeue the message。你也可以使用subscribe to the poison queue,然后重新排队

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62902546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档