【问题标题】:RabbitMQ Listening to a queue from multiple serversRabbitMQ 监听来自多个服务器的队列
【发布时间】:2018-04-18 11:15:21
【问题描述】:

我需要实现从两台服务器的队列中监听。队列名称相同。第一台服务器是主服务器,第二台服务器是备份服务器。 当主服务器关闭时,应继续使用备用服务器队列。

我的班级:

@RabbitListener(queues = "to_client")
public class ClientRabbitService {

现在我使用 RoutingConnectionFactory:

@Bean
@Primary
public ConnectionFactory routingConnectionFactory() {
    SimpleRoutingConnectionFactory rcf = new SimpleRoutingConnectionFactory();
    Map<Object, ConnectionFactory> map = new HashMap<>();
    map.put("[to_kernel]", mainConnectionFactory());
    map.put("[to_kernel_reserve]", reserveConnectionFactory());
    map.put("[to_client]", mainConnectionFactory());

    rcf.setTargetConnectionFactories(map);

    return rcf;
}

[to_kernel] 和 [to_kernel_reserve] - 仅用于发送消息的队列,[to_client] - 接收它们。

有什么想法吗?

【问题讨论】:

    标签: java spring spring-boot rabbitmq


    【解决方案1】:

    是否仅在主服务器关闭时才填充备份服务器上的队列?如果是,您可能总是同时监听两个队列(当主服务器启动时,辅助服务器上的队列将为空)。

    请注意,如果您使用 RabbitMQ 集群,您的解决方案会更可靠。 然后,连接到集群(指定集群中所有机器的地址)。

    官方文档中有说明https://docs.spring.io/spring-amqp/reference/htmlsingle/#connections

    或者,如果在集群环境中运行,请使用 地址属性。

    <rabbit:connection-factory id="connectionFactory" addresses="host1:5672,host2:5672"/>
    

    使用集群时,您将拥有单个队列(跨集群复制)。请注意,RabbitMQ 在使用复制时会受到严重的性能影响,请务必阅读官方文档如何配置集群https://www.rabbitmq.com/clustering.html

    【讨论】:

      猜你喜欢
      • 2016-12-29
      • 2020-11-07
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 2018-08-26
      • 2017-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多