Saya memiliki satu metode pendengar yang dianotasi dengan @RabbitListener yang saat ini dikonfigurasi untuk mendengarkan dari 1 cluster kelinci. Sekarang saya memiliki cluster kelinci lain (cluster2) yang memiliki kunci antrian/pertukaran/perutean yang sama dan mungkin dapat menerbitkan pesan.

Apakah ada cara untuk menggunakan metode pendengar yang sama untuk mendengarkan dari kedua cluster? Sebagai pendengar saya tidak peduli dari cluster mana pesan itu berasal dan saya ingin melakukan pemrosesan yang sama untuk keduanya.

    // 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 saya memiliki konfigurasi di bawah ini yang ditentukan

cluster1.rabbitmq.host
cluster1.rabbitmq.username
cluster1.rabbitmq.password
1
opuser1 14 Mei 2020, 22:24

1 menjawab

Jawaban Terbaik

Buat dua pabrik wadah pendengar dan tambahkan @RabbitListener kedua ke metode

@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) {
    // ....
}

Yang pertama akan menggunakan default rabbitListenerContainerFactory.

1
Gary Russell 14 Mei 2020, 19:53