有没有一种方法可以指定重试消息的等待时间?

Yin

有没有一种方法可以为特定异常指定重试消息的等待时间?

例如,如果对象处于SomethingInProgress状态,则抛出SomethignInProgressException,我希望消息在40m后重试。还是引发SomethingInProgressEvent并使用bus.defer更合适?

mookid8000

这是Rebus不具有二级重试概念的部分原因-我根本没有看到可以以通用且足够灵活的方式创建此功能的任何方式。

简短地回答您的问题:不,没有(内置)改变特定异常重试之间的时间的方法。事实上,有没有办法来配置重试之间的等待时间在所有-失败的消息将被重试为快,可能的话,然后移动到错误队列,如果他们一直没能避免“堵塞管道”。

对于您的情况,我建议您执行以下操作:

public void Handle(MyMessage message) {
    var headers = MessageContext.GetCurrent().Headers;
    var deliveryAttempt = headers.ContainsKey("attempt_no") 
        ? Convert.ToInt(headers["attempt_no"]) 
        : 0;

    try {
        DoWhateverWithThe(message);
    } catch(OneKindOfException e) {
        if (deliveryAttempt > 5) {
            bus.Advanced.Routing.ForwardCurrentMessage("error");
            return;
        }

        bus.AttachHeader(message, "attempt_no", deliveryAttempt + 1);
        bus.Defer(TimeSpan.FromSeconds(20), message);
    } catch(AnotherKindOfException e) {
        if (deliveryAttempt > 5) {
            bus.Advanced.Routing.ForwardCurrentMessage("error");
            return;
        }

        bus.AttachHeader(message, "attempt_no", deliveryAttempt + 1);
        bus.Defer(TimeSpan.FromMinutes(2), message);
    }
}

我只是在脑海中写下了自己的想法,但并没有100%地确定它确实可以编译...但是要点是,我们跟踪在消息的自定义标头中进行了多少次传递尝试,然后bus.Defer响起消息每次失败的传递尝试的适当时间跨度,如果超过我们的最大传递尝试次数,则立即将消息转发到错误队列。

我希望这是有道理的 :)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有一种方法可以指定HTML5视频元素的超时时间?

来自分类Dev

Camel,Spring,OSGI:有没有一种方法可以指定stop方法?

来自分类Dev

Camel,Spring,OSGI:有没有一种方法可以指定stop方法?

来自分类Dev

有没有一种方法可以禁止发送ResendRequest消息?

来自分类Dev

有没有一种方法可以实时更新tkinter消息框?

来自分类Dev

有没有一种方法可以获取消息作者的姓名

来自分类Dev

有没有一种方法可以从WebException中提取消息?

来自分类Dev

有没有一种方法可以防止意外发送消息?

来自分类Dev

有没有一种方法可以指定date.js的输入格式?

来自分类Dev

有没有一种方法可以在Java中明确指定构造函数?

来自分类Dev

有没有一种方法可以为QGraphicsItem指定选择区域?

来自分类Dev

有没有一种方法可以将列名指定为参数?

来自分类Dev

有没有一种方法可以在plm函数中指定值?

来自分类Dev

有没有一种方法可以指定类的默认属性?

来自分类Dev

有没有一种方法可以在@Path批注中指定查询参数?

来自分类Dev

有没有一种方法可以生成基于时间戳的uuid?

来自分类Dev

有没有一种方法可以使用Moment JS验证时间?

来自分类Dev

有没有一种方法可以在SQL中使用“时间的开始”

来自分类Dev

有没有一种方法可以从Monocle的伪时间图中检索坐标?

来自分类Dev

有没有一种方法可以减少雪管加载时间?

来自分类Dev

有没有一种方法可以在访问中存储时间戳?

来自分类Dev

有没有一种方法可以获取更新索引的镜像的时间戳记?

来自分类Dev

有没有一种方法可以一次在CMakeList中指定所有GDCM库?

来自分类Dev

有没有一种方法可以计算包含时间格式的数据的整个列的平均队列时间

来自分类Dev

有没有一种方法可以为Django中的所有模板指定默认的基本模板?

来自分类Dev

有没有一种方法可以为Django中的所有模板指定默认的基础模板?

来自分类Dev

有没有一种方法可以使UI输入框以指定的时间间隔弹出,而不管您使用Apps Scipt所处的页面如何?

来自分类Dev

有没有一种方法可以考虑到属性值来指定元素是唯一的?

来自分类Dev

有没有一种方法可以存储要在Powershell中重复使用的消息框设置?

Related 相关文章

  1. 1

    有没有一种方法可以指定HTML5视频元素的超时时间?

  2. 2

    Camel,Spring,OSGI:有没有一种方法可以指定stop方法?

  3. 3

    Camel,Spring,OSGI:有没有一种方法可以指定stop方法?

  4. 4

    有没有一种方法可以禁止发送ResendRequest消息?

  5. 5

    有没有一种方法可以实时更新tkinter消息框?

  6. 6

    有没有一种方法可以获取消息作者的姓名

  7. 7

    有没有一种方法可以从WebException中提取消息?

  8. 8

    有没有一种方法可以防止意外发送消息?

  9. 9

    有没有一种方法可以指定date.js的输入格式?

  10. 10

    有没有一种方法可以在Java中明确指定构造函数?

  11. 11

    有没有一种方法可以为QGraphicsItem指定选择区域?

  12. 12

    有没有一种方法可以将列名指定为参数?

  13. 13

    有没有一种方法可以在plm函数中指定值?

  14. 14

    有没有一种方法可以指定类的默认属性?

  15. 15

    有没有一种方法可以在@Path批注中指定查询参数?

  16. 16

    有没有一种方法可以生成基于时间戳的uuid?

  17. 17

    有没有一种方法可以使用Moment JS验证时间?

  18. 18

    有没有一种方法可以在SQL中使用“时间的开始”

  19. 19

    有没有一种方法可以从Monocle的伪时间图中检索坐标?

  20. 20

    有没有一种方法可以减少雪管加载时间?

  21. 21

    有没有一种方法可以在访问中存储时间戳?

  22. 22

    有没有一种方法可以获取更新索引的镜像的时间戳记?

  23. 23

    有没有一种方法可以一次在CMakeList中指定所有GDCM库?

  24. 24

    有没有一种方法可以计算包含时间格式的数据的整个列的平均队列时间

  25. 25

    有没有一种方法可以为Django中的所有模板指定默认的基本模板?

  26. 26

    有没有一种方法可以为Django中的所有模板指定默认的基础模板?

  27. 27

    有没有一种方法可以使UI输入框以指定的时间间隔弹出,而不管您使用Apps Scipt所处的页面如何?

  28. 28

    有没有一种方法可以考虑到属性值来指定元素是唯一的?

  29. 29

    有没有一种方法可以存储要在Powershell中重复使用的消息框设置?

热门标签

归档