我目前正在调查Rebus,但无法找到好的文档,这个过程证明是困难的。我希望有人能帮助我了解这个令人兴奋的产品。
我读到在消息处理过程中,如果出现问题,消息将返回到队列。
- 消息是返回到队列的前面还是放在队列的末尾?如果放在前面,这将是一个问题,因为队列实际上会被无法处理的消息阻塞——至少在超时或重试超时之前是这样。 Rebus是否支持开箱即用的单独的重试队列?
- 可以指定重试的时间间隔吗?
- 我可以指定一个指数回退间隔重试在Apache ActiveMQ?
谢谢
1)队列事务回滚,有效地将消息移回前面-因此,它将立即重试。
在5次失败尝试之后(至少这是默认值),Rebus将把消息移动到错误队列。默认的重试机制故意设计得非常快速——这样,输入队列就永远不会被有毒消息阻塞。
如果您需要更复杂的重试,我建议您看一下bus.Defer
-它可以将消息的传递推迟到将来。它要求你有一个超时管理器(*)在运行。
2)我想这就是我所说的"错误队列",除了没有重试:)
我确实在某个时候创建了一个解决方案,但是,我编写了一个简单的端点,它将定期清空错误队列并将所有消息移回原始源队列,作为一种粗略的自动第二级重试机制。
3)没有。NServiceBus有第二级重试的概念,但这是我在Rebus中从未真正需要(足够)的东西。但是有了Rebus,你就可以靠自己了——做一些智能的bus.Defer
应该是相当容易的,然后可以很容易地适应你所期望的每种错误。
见(3)
我希望这能澄清一点:)
(*)超时管理器可以是一个单独的端点,其唯一的任务是接收消息,将其保留一段时间(即将其保存到数据库中),然后在时间过去后将其返回给发送方。超时管理器可以在进程内托管,但是要使用.Timeouts(t => t.???)
配置咒语。