【问题标题】:RabbitMQ Microservices - Parallel processingRabbitMQ 微服务 - 并行处理
【发布时间】:2020-05-28 04:07:30
【问题描述】:

我正在开发一个使用rabbitmq 作为消息传递系统的微服务架构应用程序。

微服务之间的调用是异步的http请求,每个服务都订阅特定的队列

我的问题是调用是无状态的,如何保证消息通信的并行化不是通过rabbitmq队列中的routing-key而是通过http调用本身,也就是说对于n调用每个服务都必须能够监听到只需要的消息。

【问题讨论】:

  • 为什么服务之间的调用不通过 rabbit?
  • 是这样,数据是通过 RabbitMQ 传输的,我想确保对于任何 http 请求(例如参数不同),Rabbit lsitener 必须只读取关联的消息跨度>
  • 说实话我不明白这个问题。您正在使用 REST API?我建议使用客户端库,您将获得更好的性能和可靠性。
  • 如果你需要 RPC,那么 RabbitMQ 有 Direct Reply-To 可以避免使用回复队列的复杂性:rabbitmq.com/direct-reply-to.html

标签: java rabbitmq microservices


【解决方案1】:

不确定我是否完全理解了这个问题,但我可以根据描述提出以下建议:

如果每个服务都连接到特定的侦听器,并且您不想为 Queue+Listener 集成关联 Routing-Key,那么您可以尝试使用标头参数。 [您可以使用 QueueBuilder.withArguments API 来设置队列应该监听的特定 Header 值] 需要有一种机制,通过该机制,交换将绑定到特定队列,从而绑定到侦听器服务。

Publisher -> Exchange --->(带有标头)绑定到 Queue -> Listener

【讨论】:

    【解决方案2】:

    对不起,我试图进一步解释:

    场景是我们在一个微服务架构中,由于数据响应巨大,调用服务会在监听器rabbitmq队列中接收到答案。

    所以让我们假设两个调用同时进行,并且两个查询都开始将数据加载到同一个队列中,调用服务正在等待消息并添加接收到的消息,但无法区分调用者 1 和调用者 2 的数据。

    监听器有没有更好的实现方式

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-27
      • 2021-01-12
      • 2017-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-20
      • 1970-01-01
      相关资源
      最近更新 更多