使用 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 message
和 TTL。 RPCServer
收到 request message
并发送 response message
后,它应该 ACK
request message
.
如果RPCServer
:
- 消费前失败
request message
或
- 发送失败
response message
request message
将重新发布到 Dead Letter Exchange,因此 RPCClient
可以消费到与该交换绑定的某个队列,它可以知道哪个请求超时。
我是 RabbitMQ 的新手,想用 RabbitMQ.So 实现 SAGA 的异步消息传递我使用 RabbitMQ 的 RPC 示例来完成任务。我有一个编排器 (RPCClient) 和多个微服务 (RPCServer)。 Orchestrator 使用独特的队列来命令 microservices.And 每个微服务使用一个公共队列(Reply_Queue)来回复 orchestrator。为了保留日志,当任何微服务在任何可配置的时间内关闭时,我想在编排器端获得通知。 我阅读了有关消费者取消的信息,但它仅在我删除 queue.How 以在 JAVA 中获取通知并保留队列消息时才有效?它是实现 saga 异步消息传递的正确方法吗?
实现可靠的 RPC 很难,我无法提供有关如何实现的详细指南。如果我们忽略相同的特殊故障情况,我可以给出一个简单的解决方法:
首先,我们假设RPCClient
永远不会失败,RPCServer
随时可能失败。
RPCClient
需要知道哪个请求超时,所以它可以发送 request message
和 TTL。 RPCServer
收到 request message
并发送 response message
后,它应该 ACK
request message
.
如果RPCServer
:
- 消费前失败
request message
或 - 发送失败
response message
request message
将重新发布到 Dead Letter Exchange,因此 RPCClient
可以消费到与该交换绑定的某个队列,它可以知道哪个请求超时。