RabbitMQ从多个服务器收听队列

时间:2018-04-18 11:15:21

标签: java spring spring-boot rabbitmq

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

我的课程:

@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] - 接收消息。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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

请注意,如果使用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