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
。
我有一个用 @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
。