使用RabbitMQ的Saga消息传递实现

时间:2019-05-17 15:53:26

标签: java rabbitmq saga

我是RabbitMQ的新手,想通过RabbitMQ实现SAGA的异步消息传递,因此我使用RabbitMQ的RPC示例来完成任务。我有一个协调器(RPCClient)和多个微服务(RPCServer)。 Orchestrator使用唯一的队列来命令微服务,而每个微服务使用一个公共队列(Reply_ Queue)来答复Orchestrator。为了保留日志,当任何微服务在任何可配置的时间内关闭时,我想在协调器端获取通知。 我了解了有关取消消费者的信息,但仅在删除队列时有效。如何在JAVA中通过保留队列消息来获取通知?是实现传奇异步消息传递的正确方法吗?

1 个答案:

答案 0 :(得分:0)

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

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

RPCClient需要知道哪个请求超时,因此它可以使用TTL发送request messageRPCServer收到request message并发送response message后,它应该ACK request message

如果RPCServer

  • 在消耗request message之前失败了 OR
  • 在发送response message之前失败了

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