Java RabbitMQ侦听来自多个服务器的队列

Java RabbitMQ侦听来自多个服务器的队列,java,spring,spring-boot,rabbitmq,Java,Spring,Spring Boot,Rabbitmq,我需要实现从两台服务器的队列进行侦听。队列名称相同。第一台服务器是主服务器,第二台是备份服务器。 当主服务器关闭时,应继续使用备份服务器队列 我的班级: @RabbitListener(queues = "to_client") public class ClientRabbitService { 现在我使用RoutingConnectionFactory: @Bean @Primary public ConnectionFactory routingConnectionFactory() {

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

我的班级:

@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;
}
@Bean
@初级的
公共连接工厂路由连接工厂(){
SimpleRoutingConnectionFactory rcf=新的SimpleRoutingConnectionFactory();
Map Map=newhashmap();
put(“[to_kernel]”,mainConnectionFactory());
put(“[to_kernel_reserve]”,reserveConnectionFactory());
map.put(“[to_client]”,mainConnectionFactory());
rcf.SetTargetConnectionFactorys(地图);
返回循环贷款;
}
[to_kernel]和[to_kernel_reserve]-仅用于向[to_client]发送消息以接收消息的队列


有什么想法吗?

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

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

官方文件对此进行了解释

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

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

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