-9

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

在消息处理过程中读到过,如果出现问题,消息将返回队列。

  1. 消息是返回到队列的最前面还是放在最后?如果放在前面,这将是一个问题,因为队列本质上会被一条可能无法处理的消息阻塞 - 至少直到它超时或超过重试次数。
  2. Rebus 是否支持开箱即用的单独重试队列
  3. 我可以指定重试之间的间隔吗?
  4. 我可以像在Apache ActiveMQ中那样为重试指定一个指数退避间隔吗?

谢谢

4

1 回答 1

3

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

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

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

2)我想这就是我所说的“错误队列”,除了没有重试:)

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

3) 没有。 NServiceBus 有二级重试的概念,但这是我对 Rebus 从来没有真正需要(足够)的东西。但是有了 Rebus,你就可以自己在这里了——做一些智能应该很容易bus.Defer,然后可以很容易地适应你所期望的每一种错误。

4)见(3)

我希望澄清一点:)

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

于 2014-08-13T07:17:16.067 回答