使用 RabbitMQ 实现 Saga 消息传递

Saga messaging implementation with RabbitMQ

我是 RabbitMQ 的新手,想用 RabbitMQ.So 实现 SAGA 的异步消息传递我使用 RabbitMQ 的 RPC 示例来完成任务。我有一个编排器 (RPCClient) 和多个微服务 (RPCServer)。 Orchestrator 使用独特的队列来命令 microservices.And 每个微服务使用一个公共队列(Reply_Queue)来回复 orchestrator。为了保留日志,当任何微服务在任何可配置的时间内关闭时,我想在编排器端获得通知。 我阅读了有关消费者取消的信息,但它仅在我删除 queue.How 以在 JAVA 中获取通知并保留队列消息时才有效?它是实现 saga 异步消息传递的正确方法吗?

实现可靠的 RPC 很难,我无法提供有关如何实现的详细指南。如果我们忽略相同的特殊故障情况,我可以给出一个简单的解决方法:

首先,我们假设RPCClient永远不会失败,RPCServer随时可能失败。

RPCClient 需要知道哪个请求超时,所以它可以发送 request messageTTLRPCServer 收到 request message 并发送 response message 后,它应该 ACK request message.

如果RPCServer:

  • 消费前失败request message
  • 发送失败response message

request message 将重新发布到 Dead Letter Exchange,因此 RPCClient 可以消费到与该交换绑定的某个队列,它可以知道哪个请求超时。