アノテーション付きエンドポイントメソッドシグネチャー
これまでのところ、エンドポイントに単純な String
を注入してきましたが、実際には非常に柔軟なメソッドシグネチャーを持つことができます。次の例では、Order
にカスタムヘッダーを挿入するように書き換えています。
@Component
public class MyService {
@RabbitListener(queues = "myQueue")
public void processOrder(Order order, @Header("order_type") String orderType) {
...
}
}
次のリストは、リスナーエンドポイントのパラメーターと照合するために使用できる引数を示しています。
生の
org.springframework.amqp.core.Message
。生の
Message
からのMessageProperties
。メッセージを受信した
com.rabbitmq.client.Channel
。受信 AMQP メッセージから変換された
org.springframework.messaging.Message
。@Header
- 標準 AMQP ヘッダーを含む特定のヘッダー値を抽出するためのアノテーション付きメソッド引数。@Headers
- すべてのヘッダーにアクセスするためにjava.util.Map
にも割り当て可能でなければならないアノテーション付き引数。変換されたペイロード
サポートされている型 (つまり、Message
、MessageProperties
、Message<?>
、Channel
) の 1 つではないアノテーションなしの要素は、ペイロードと一致します。パラメーターに @Payload
のアノテーションを付けることで、それを明示的にすることができます。追加の @Valid
を追加して検証をオンにすることもできます。
Spring のメッセージ抽象化を挿入する機能は、トランスポート固有の API に依存することなく、トランスポート固有のメッセージに格納されているすべての情報を利用するのに特に役立ちます。次の例は、その方法を示しています。
@RabbitListener(queues = "myQueue")
public void processOrder(Message<Order> order) { ...
}
メソッド引数の処理は DefaultMessageHandlerMethodFactory
によって提供されます。これをさらにカスタマイズして、追加のメソッド引数をサポートできます。変換と検証のサポートもそこでカスタマイズできます。
たとえば、処理する前に Order
が有効であることを確認したい場合は、ペイロードに @Valid
のアノテーションを付けて、次のように必要なバリデータを構成できます。
@Configuration
@EnableRabbit
public class AppConfig implements RabbitListenerConfigurer {
@Override
public void configureRabbitListeners(RabbitListenerEndpointRegistrar registrar) {
registrar.setMessageHandlerMethodFactory(myHandlerMethodFactory());
}
@Bean
public DefaultMessageHandlerMethodFactory myHandlerMethodFactory() {
DefaultMessageHandlerMethodFactory factory = new DefaultMessageHandlerMethodFactory();
factory.setValidator(myValidator());
return factory;
}
}