【问题标题】:Saga messaging implementation with RabbitMQ使用 RabbitMQ 实现 Saga 消息传递
【发布时间】:2019-05-18 14:41:20
【问题描述】:

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

【问题讨论】:

    标签: java rabbitmq saga


    【解决方案1】:

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

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

    RPCClient 需要知道哪个请求超时,所以它可以发送带有TTLrequest message。在RPCServer接收request message并发送response message之后,应该是ACKrequest message

    如果RPCServer:

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

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

    【讨论】:

      猜你喜欢
      • 2014-02-17
      • 2015-10-02
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-27
      相关资源
      最近更新 更多