如何在Rebus中指定重新传递策略和单独的重试队列处理器

时间:2014-08-13 05:12:29

标签: rebus

我目前正在调查Rebus,但由于无法找到好的文档,这个过程很难证明。我希望有人能帮助我理解这个令人兴奋的产品。

I have read在邮件处理过程中,如果出现问题,邮件将返回队列。

  1. 邮件是返回队列的前面还是放在最后?如果放在前面,这将是问题,因为队列本质上被阻止了可能无法处理的消息 - 至少在超时或重试超过之前。
  2. Rebus是否支持开箱即用的 separate Retry queue
  3. 我可以指定重试之间的间隔吗?
  4. 我可以在Apache ActiveMQ中为重试指定指数退避时间间隔吗?
  5. 谢谢

1 个答案:

答案 0 :(得分:3)

1)回滚队列事务,有效地将消息移回前面 - 因此,它将立即重试。

尝试失败5次后(至少是默认值),Rebus会将消息移至错误队列。默认的重试机制是故意非常快速的 - 这样,输入队列永远不会被有毒消息阻塞。

如果您需要更复杂的重试,我建议您查看bus.Defer - 它可以推迟向未来发送消息。它要求您运行超时管理器(*)。

2)我猜这就是我所说的"错误队列",除非没有重试:)

我确实创建了一个解决方案,但是,我编写了一个简单的端点,它会定期清空错误队列并将所有消息移回原始源队列,作为原始自动二级重试机制的一种形式。

3)否.NServiceBus具有second-level retries的概念,但这是我从未真正需要(足够)Rebus的东西。但是对于Rebus来说,你自己就在这里 - 做一些聪明的bus.Defer应该很容易,然后可以很容易地适应你期望的每种错误。

4)见(3)

我希望澄清一点:)

(*)超时管理器可以是一个单独的端点,其生命中唯一的工作是接收消息,保持一段时间(即将其保存到数据库中),然后将其返回给发送方时间过去了。但是,超时管理器可以在进程中托管,但使用.Timeouts(t => t.???)配置法术。