マルチメソッドリスナー

バージョン 1.5.0 以降、クラスレベルで @RabbitListener アノテーションを指定できます。新しい @RabbitHandler アノテーションと共に、これにより、受信メッセージのペイロード型に基づいて、1 つのリスナーがさまざまなメソッドを呼び出すことができます。これは、例を使用して最もよく説明されています。

@RabbitListener(id="multi", queues = "someQueue")
@SendTo("my.reply.queue")
public class MultiListenerBean {

    @RabbitHandler
    public String thing2(Thing2 thing2) {
        ...
    }

    @RabbitHandler
    public String cat(Cat cat) {
        ...
    }

    @RabbitHandler
    public String hat(@Header("amqp_receivedRoutingKey") String rk, @Payload Hat hat) {
        ...
    }

    @RabbitHandler(isDefault = true)
    public String defaultMethod(Object object) {
        ...
    }

}

この場合、変換されたペイロードが Thing2Cat、または Hat であれば、個々の @RabbitHandler メソッドが呼び出されます。システムは、ペイロード型に基づいて一意のメソッドを識別できなければならないことを理解する必要があります。型は、アノテーションを持たないか、@Payload アノテーションでアノテーションが付けられている単一のパラメーターへの割り当て可能性についてチェックされます。メソッドレベルの @RabbitListener ( 前述の) で説明したように、同じメソッドシグネチャーが適用されることに注意してください。

バージョン 2.0.3 以降では、@RabbitHandler メソッドをデフォルトメソッドとして指定できます。これは、他のメソッドに一致するものがない場合に呼び出されます。そのように指定できるメソッドは多くても 1 つです。

@RabbitHandler は、変換後のメッセージペイロードの処理のみを目的としています。変換されていない生の Message オブジェクトを受け取りたい場合は、クラスではなくメソッドで @RabbitListener を使用する必要があります。