マルチメソッドリスナー
バージョン 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) {
...
}
}
この場合、変換されたペイロードが Thing2
、Cat
、または Hat
であれば、個々の @RabbitHandler
メソッドが呼び出されます。システムは、ペイロード型に基づいて一意のメソッドを識別できなければならないことを理解する必要があります。型は、アノテーションを持たないか、@Payload
アノテーションでアノテーションが付けられている単一のパラメーターへの割り当て可能性についてチェックされます。メソッドレベルの @RabbitListener
( 前述の) で説明したように、同じメソッドシグネチャーが適用されることに注意してください。
バージョン 2.0.3 以降では、@RabbitHandler
メソッドをデフォルトメソッドとして指定できます。これは、他のメソッドに一致するものがない場合に呼び出されます。そのように指定できるメソッドは多くても 1 つです。
@RabbitHandler は、変換後のメッセージペイロードの処理のみを目的としています。変換されていない生の Message オブジェクトを受け取りたい場合は、クラスではなくメソッドで @RabbitListener を使用する必要があります。 |