【发布时间】:2020-08-01 00:02:45
【问题描述】:
我有一个 dockerized 微服务架构,我使用 Rebus 和 RabbitMQ 作为消息总线。
一个容器正在运行 RabbitMQ。其他容器正在运行通过 Rebus/RabbitMQ 相互通信的服务。
我希望我的解决方案能够适应容器重启,因此,如果 RabbitMQ 容器重启,我希望其他服务不会受到影响。 我希望在 RabbitMQ 关闭时发送的消息会排队等待 Rebus 传递 在发送服务中,并在 RabbitMQ 连接恢复时交付。
验证我是否运行了这个测试场景:
- 服务 A 通过 Rebus 和 RabbitMQ 向服务 B 发送消息。效果很好。
- 我停止了 RabbitMQ 容器。
- 服务 A 通过 Rebus 和 RabbitMQ 向服务 B 发送消息。失败是因为 RabbitMQ 不可用。
- 我再次启动 RabbitMQ 容器。
- 我可以看到我的服务中的 Rebus 在启动时会自动重新连接到 RabbitMQ。这与预期一致。
- 现在 RabbitMQ 连接已恢复,我希望 Rebus 将挂起的消息从服务 A 发送到服务 B,但它没有。
这不是 Rebus 的预期行为吗?如果没有,我可以启用此功能吗?
我已阅读此主题https://github.com/rebus-org/Rebus/wiki/Automatic-retries-and-error-handling 并尝试像这样配置 Rbus:
Configure.With(...)
.Options(b => b.SimpleRetryStrategy(maxDeliveryAttempts: 10))
.(...)
但没有运气。
【问题讨论】:
标签: rebus rebus-rabbitmq