Spring AMQP RabbitListener 连接 2 个 Rabbit 集群

Spring AMQP RabbitListener to connect with 2 Rabbit Clusters

我有一个用 @RabbitListener 注释的侦听器方法,目前配置为从 1 个兔子集群侦听。现在我有另一个 rabbit cluster(cluster2) 定义了相同的 queue/exchange/routing 键并且可以发布消息。

有没有办法使用相同的侦听器方法来侦听两个集群?作为一个听众,我不关心消息来自哪个集群,我想对两者进行相同的处理。

    // Config

    @Bean
    @ConfigurationProperties("cluster1.rabbitmq")
    public RabbitProperties rabbitProps() {
        return new RabbitProperties();
    }

    // Listener code

    @RabbitListener(id = "My App", bindings = @QueueBinding(value = @Queue(value = "Some_Queue_Name"), 
            exchange = @Exchange(value = "Some_Exchange_Name"), 
            key = "Some_Routing_Key"))
    public void onMessage(final Message message) {
        // ....
    }

我的 application.yml 定义了以下配置

cluster1.rabbitmq.host
cluster1.rabbitmq.username
cluster1.rabbitmq.password

创建两个侦听器容器工厂并向方法添加第二个@RabbitListener

@RabbitListener(id = "My App 1", 
            bindings = @QueueBinding(value = @Queue(value = "Some_Queue_Name"), 
            exchange = @Exchange(value = "Some_Exchange_Name"), 
            key = "Some_Routing_Key"))
@RabbitListener(id = "My App 2", containerFactory="secondContainerFactory"
            bindings = @QueueBinding(value = @Queue(value = "Some_Queue_Name"), 
            exchange = @Exchange(value = "Some_Exchange_Name"), 
            key = "Some_Routing_Key"))
public void onMessage(final Message message) {
    // ....
}

第一个将使用默认 rabbitListenerContainerFactory