複数のキューをリッスンする

queues 属性を使用すると、関連付けられたコンテナーが複数のキューをリッスンできるように指定できます。@Header アノテーションを使用して、メッセージの受信元のキュー名を POJO メソッドで使用できるようにすることができます。次の例は、その方法を示しています。

@Component
public class MyService {

    @RabbitListener(queues = { "queue1", "queue2" } )
    public void processOrder(String data, @Header(AmqpHeaders.CONSUMER_QUEUE) String queue) {
        ...
    }

}

バージョン 1.5 以降では、プロパティプレースホルダーと SpEL を使用してキュー名を外部化できます。次の例は、その方法を示しています。

@Component
public class MyService {

    @RabbitListener(queues = "#{'${property.with.comma.delimited.queue.names}'.split(',')}" )
    public void processOrder(String data, @Header(AmqpHeaders.CONSUMER_QUEUE) String queue) {
        ...
    }

}

バージョン 1.5 より前では、この方法で指定できるキューは 1 つだけでした。各キューには個別のプロパティが必要でした。