我是RabbitMQ的新手,想通过RabbitMQ实现SAGA的异步消息传递,因此我使用RabbitMQ的RPC示例来完成任务。我有一个协调器(RPCClient)和多个微服务(RPCServer)。 Orchestrator使用唯一的队列来命令微服务,而每个微服务使用一个公共队列(Reply_ Queue)来答复Orchestrator。为了保留日志,当任何微服务在任何可配置的时间内关闭时,我想在协调器端获取通知。 我了解了有关取消消费者的信息,但仅在删除队列时有效。如何在JAVA中通过保留队列消息来获取通知?是实现传奇异步消息传递的正确方法吗?
答案 0 :(得分:0)
要实现可靠的RPC很难,我无法提供有关如何执行此操作的详细指南。如果我们忽略相同的特殊故障情况,我可以给出一个简单的解决方法:
首先,我们假设RPCClient
永不失败,RPCServer
随时可能失败。
RPCClient
需要知道哪个请求超时,因此它可以使用TTL发送request message
。 RPCServer
收到request message
并发送response message
后,它应该ACK
request message
。
如果RPCServer
:
request message
之前失败了
OR response message
之前失败了 request message
将重新发布到Dead Letter Exchange,因此RPCClient
可以消耗到与该交换绑定的某些队列,它可以知道哪个请求超时。