2

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

4

1 回答 1

0

实现一个可靠的 RPC 是很困难的,我不能给出关于如何做到这一点的详细指南。如果我们忽略相同的特殊故障情况,我可以给出一个简单的解决方法:

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

RPCClient需要知道哪个请求超时,所以它可以request message使用TTL发送。RPCServer接收request message和发送后response message,应该ACKrequest message

如果RPCServer

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

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

于 2019-05-18T06:41:20.133 回答