クラス MessageListenerAdapter
- java.lang.ObjectSE
-
- org.springframework.amqp.rabbit.listener.adapter.AbstractAdaptableMessageListener
-
- org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter
- 実装されたすべてのインターフェース:
MessageListener
,ChannelAwareMessageListener
public class MessageListenerAdapter extends AbstractAdaptableMessageListener
柔軟なメッセージ型変換を使用して、リフレクションを介してメッセージの処理をターゲットリスナーメソッドに委譲するメッセージリスナーアダプター。リスナーメソッドが Rabbit API から完全に独立して、メッセージコンテンツ型を操作できるようにします。デフォルトでは、受信 Rabbit メッセージのコンテンツは、ターゲットリスナーメソッドに渡される前に抽出されます。これにより、ターゲットメソッドは、生の
Message
ではなく、文字列やバイト配列などのメッセージコンテンツ型を操作できるようになります。メッセージ型の変換は Spring AMQMessageConverter
に委譲されます。デフォルトでは、SimpleMessageConverter
が使用されます。(このような自動メッセージ変換を行わない場合は、必ずMessageConverter
をnull
に設定してください。)ターゲットリスナーメソッドが null 以外のオブジェクト (通常は
String
やバイト配列などのメッセージコンテンツ型) を返す場合、RabbitMessage
にラップされ、受信メッセージの交換に送信されます。Rabbit ReplyTo プロパティまたはspecified routingKey
経由)。注 : レスポンスメッセージの送信は、
ChannelAwareMessageListener
エントリポイントを使用する場合にのみ使用できます (通常は Spring メッセージリスナーコンテナーを介して)。MessageListener
としての使用は、レスポンスメッセージの生成をサポートしません。このアダプタークラスに準拠するメソッドシグネチャーの例を以下に示します。この最初の例では、すべての
Message
型を処理し、各Message
型の内容を引数として渡します。これらのメソッドはすべてvoid
を返すため、Message
は返送されません。public interface MessageContentsDelegate { void handleMessage(String text); void handleMessage(Map map); void handleMessage(byte[] bytes); void handleMessage(Serializable obj); }
次の例では、Message
型を処理し、実際の (生の)Message
を引数として渡します。ここでも、これらのメソッドはすべてvoid
を返すため、Message
は返されません。public interface RawMessageDelegate { void handleMessage(Message message); }
この次の例は、Messages
のString
コンテンツを使用するだけのMessage
デリゲートを示しています。Message
処理メソッドの名前がoriginal
とどのように異なるかにも注意してください(これは、適切な Bean 定義で構成する必要があります)。この場合も、メソッドがvoid
を返すため、Message
は返送されません。public interface TextMessageContentDelegate { void onMessage(String text); }
この最後の例は、Messages
のString
コンテンツを使用するだけのMessage
デリゲートを示しています。このメソッドの戻り値の型がString
であることに注意してください。これにより、構成済みのMessageListenerAdapter
がレスポンスとしてMessage
を送信します。public interface ResponsiveTextMessageContentDelegate { String handleMessage(String text); }
さらなる例と議論については、このクラス (およびそれに付随する XML 構成) について詳しく説明している Spring リファレンスドキュメントを参照してください。- 作成者:
- Juergen Hoeller, Mark Pollack, Mark Fisher, Dave Syer, Gary Russell, Greg Turnquist, Cai Kun
- 関連事項:
setDelegate(java.lang.Object)
,setDefaultListenerMethod(java.lang.String)
,AbstractAdaptableMessageListener.setResponseRoutingKey(String)
,AbstractAdaptableMessageListener.setMessageConverter(org.springframework.amqp.support.converter.MessageConverter)
,SimpleMessageConverter
,ChannelAwareMessageListener
,AbstractMessageListenerContainer.setMessageListener(MessageListener)
ネストされたクラスのサマリー
クラス org.springframework.amqp.rabbit.listener.adapter.AbstractAdaptableMessageListener から継承されたネストクラス / インターフェース
AbstractAdaptableMessageListener.ReplyExpressionRoot
フィールドサマリー
フィールド 修飾子と型 フィールド 説明 static StringSE
ORIGINAL_DEFAULT_LISTENER_METHOD
デフォルトのリスナーメソッド "handleMessage" のすぐに使える値。クラス org.springframework.amqp.rabbit.listener.adapter.AbstractAdaptableMessageListener から継承されたフィールド
logger
コンストラクターのサマリー
コンストラクター コンストラクター 説明 MessageListenerAdapter()
デフォルト設定で新しいMessageListenerAdapter
を作成します。MessageListenerAdapter(ObjectSE delegate)
指定されたデリゲートの新しいMessageListenerAdapter
を作成します。MessageListenerAdapter(ObjectSE delegate, StringSE defaultListenerMethod)
POJO メソッドも宣言しながら、指定されたデリゲートの新しいMessageListenerAdapter
を作成します。MessageListenerAdapter(ObjectSE delegate, MessageConverter messageConverter)
指定されたデリゲートの新しいMessageListenerAdapter
を作成します。
メソッドのサマリー
すべてのメソッド インスタンスメソッド 具象メソッド 修飾子と型 メソッド 説明 void
addQueueOrTagToMethodName(StringSE queueOrTag, StringSE methodName)
キュー名またはコンシューマータグのマッピングをメソッド名に追加します。protected ObjectSE[]
buildListenerArguments(ObjectSE extractedMessage, com.rabbitmq.client.Channel channel, Message message)
ターゲットリスナーメソッドに渡される引数の配列を作成します。protected StringSE
getDefaultListenerMethod()
protected ObjectSE
getDelegate()
protected StringSE
getListenerMethodName(Message originalMessage, ObjectSE extractedMessage)
指定されたメッセージを処理するリスナーメソッドの名前を決定します。protected ObjectSE
invokeListenerMethod(StringSE methodName, ObjectSE[] arguments, Message originalMessage)
指定されたリスナーメソッドを呼び出します。void
onMessage(Message message, com.rabbitmq.client.Channel channel)
SpringChannelAwareMessageListener
エントリポイント。StringSE
removeQueueOrTagToMethodName(StringSE queueOrTag)
キュー名またはコンシューマータグからメソッド名へのマッピングを削除します。void
setDefaultListenerMethod(StringSE defaultListenerMethod)
特定のリスナーメソッドが決定されていない場合に、委譲先のデフォルトリスナーメソッドの名前を指定します。void
setDelegate(ObjectSE delegate)
リスニングするメッセージを委譲するターゲットオブジェクトを設定します。void
setQueueOrTagToMethodName(MapSE<StringSE,StringSE> queueOrTagToMethodName)
キュー名またはコンシューマータグのマッピングをメソッド名に設定します。クラス org.springframework.amqp.rabbit.listener.adapter.AbstractAdaptableMessageListener から継承されたメソッド
buildMessage, containerAckMode, convert, doHandleResult, doPublish, extractMessage, getEncoding, getMessageConverter, getReceivedExchange, getReplyContentType, getReplyToAddress, handleListenerException, handleResult, handleResult, isConverterWinsContentType, postProcessChannel, postProcessResponse, sendResponse, setBeanResolver, setBeforeSendReplyPostProcessors, setConverterWinsContentType, setDefaultRequeueRejected, setEncoding, setMandatoryPublish, setMessageConverter, setRecoveryCallback, setReplyContentType, setReplyPostProcessor, setResponseAddress, setResponseExchange, setResponseRoutingKey, setRetryTemplate
クラス java.lang.ObjectSE から継承されたメソッド
clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, toString, wait, waitSE, waitSE
インターフェース org.springframework.amqp.rabbit.listener.api.ChannelAwareMessageListener から継承されたメソッド
onMessage, onMessageBatch
インターフェース org.springframework.amqp.core.MessageListener から継承されたメソッド
isAsyncReplies, onMessageBatch
コンストラクターの詳細
MessageListenerAdapter
public MessageListenerAdapter()
デフォルト設定で新しいMessageListenerAdapter
を作成します。
MessageListenerAdapter
public MessageListenerAdapter(ObjectSE delegate)
指定されたデリゲートの新しいMessageListenerAdapter
を作成します。- パラメーター:
delegate
- デリゲートオブジェクト
MessageListenerAdapter
public MessageListenerAdapter(ObjectSE delegate, MessageConverter messageConverter)
指定されたデリゲートの新しいMessageListenerAdapter
を作成します。- パラメーター:
delegate
- デリゲートオブジェクトmessageConverter
- 使用するメッセージコンバーター
MessageListenerAdapter
public MessageListenerAdapter(ObjectSE delegate, StringSE defaultListenerMethod)
POJO メソッドも宣言しながら、指定されたデリゲートの新しいMessageListenerAdapter
を作成します。- パラメーター:
delegate
- デリゲートオブジェクトdefaultListenerMethod
- メッセージ受信時に呼び出す POJO メソッドの名前
メソッドの詳細
setDelegate
public void setDelegate(ObjectSE delegate)
リスニングするメッセージを委譲するターゲットオブジェクトを設定します。指定したリスナーメソッドは、このターゲットオブジェクトに存在する必要があります。明示的なデリゲートオブジェクトが指定されていない場合、リスナーメソッドは、このアダプターインスタンス(つまり、このアダプターのカスタムサブクラス)に存在し、リスナーメソッドを定義することが想定されています。
- パラメーター:
delegate
- デリゲートリスナーまたは POJO。
getDelegate
protected ObjectSE getDelegate()
- 戻り値:
- リッスンするメッセージをデリゲートするターゲットオブジェクト。
setDefaultListenerMethod
public void setDefaultListenerMethod(StringSE defaultListenerMethod)
特定のリスナーメソッドが決定されていない場合に、委譲先のデフォルトリスナーメソッドの名前を指定します。デフォルトの値は"handleMessage"
です。- パラメーター:
defaultListenerMethod
- デフォルトのリスナーメソッドの名前。- 関連事項:
getListenerMethodName(org.springframework.amqp.core.Message, java.lang.Object)
getDefaultListenerMethod
protected StringSE getDefaultListenerMethod()
- 戻り値:
- デリゲート先のデフォルトリスナーメソッドの名前。
setQueueOrTagToMethodName
public void setQueueOrTagToMethodName(MapSE<StringSE,StringSE> queueOrTagToMethodName)
キュー名またはコンシューマータグのマッピングをメソッド名に設定します。最初のルックアップはキュー名によるもので、null が返された場合はコンシューマータグでルックアップされ、null が返された場合はdefaultListenerMethod
が使用されます。- パラメーター:
queueOrTagToMethodName
- 地図。- 導入:
- 1.5
addQueueOrTagToMethodName
public void addQueueOrTagToMethodName(StringSE queueOrTag, StringSE methodName)
キュー名またはコンシューマータグのマッピングをメソッド名に追加します。最初のルックアップはキュー名によるもので、null が返された場合はコンシューマータグでルックアップされ、null が返された場合はdefaultListenerMethod
が使用されます。- パラメーター:
queueOrTag
- キュー名またはコンシューマータグ。methodName
- メソッド名。- 導入:
- 1.5
removeQueueOrTagToMethodName
public StringSE removeQueueOrTagToMethodName(StringSE queueOrTag)
キュー名またはコンシューマータグからメソッド名へのマッピングを削除します。- パラメーター:
queueOrTag
- キュー名またはコンシューマータグ。- 戻り値:
- 削除されたメソッド名、または null。
- 導入:
- 1.5
onMessage
public void onMessage(Message message, com.rabbitmq.client.Channel channel) throws ExceptionSE
SpringChannelAwareMessageListener
エントリポイント。メッセージ引数を適切に変換して、メッセージをターゲットリスナーメソッドに委譲します。ターゲットメソッドが null 以外のオブジェクトを返す場合は、Rabbit メッセージをラップして送り返します。
- パラメーター:
message
- 受信 Rabbit メッセージchannel
- 動作する Rabbit チャネル- 例外:
ExceptionSE
- Rabbit API メソッドによってスローされた場合
getListenerMethodName
protected StringSE getListenerMethodName(Message originalMessage, ObjectSE extractedMessage)
指定されたメッセージを処理するリスナーメソッドの名前を決定します。デフォルトの実装では、最初に
queueOrTagToMethodName
マップを調べて、コンシューマーキューまたはコンシューマータグで一致を探します。一致が見つからない場合は、構成されたデフォルトのリスナーメソッドを返すか、構成されていない場合は "handleMessage" を返します。- パラメーター:
originalMessage
- Rabbit リクエストメッセージextractedMessage
- 変換された Rabbit リクエストメッセージ。引数としてリスナーメソッドに渡されます- 戻り値:
- リスナーメソッドの名前 (非
null
) - 関連事項:
setDefaultListenerMethod(java.lang.String)
,setQueueOrTagToMethodName(java.util.Map<java.lang.String, java.lang.String>)
buildListenerArguments
protected ObjectSE[] buildListenerArguments(ObjectSE extractedMessage, com.rabbitmq.client.Channel channel, Message message)
ターゲットリスナーメソッドに渡される引数の配列を作成します。単一のメッセージオブジェクトから複数のメソッド引数を作成できるようにします。デフォルトの実装では、指定されたメッセージオブジェクトを唯一の要素として配列を構築します。つまり、抽出されたメッセージは、たとえそれが配列であっても、常に単一のメソッド引数に渡され、ターゲットメソッドには対応する配列の型の単一の引数が宣言されます。
これをオーバーライドして、配列などの特別なメッセージコンテンツを異なる方法で処理することができます。たとえば、メッセージ配列の各要素を個別のメソッド引数として渡します。
- パラメーター:
extractedMessage
- メッセージの内容channel
- 動作する Rabbit チャネルmessage
- 受信 Rabbit メッセージ- 戻り値:
- リスナーメソッドに渡される引数の配列 (個別のメソッド引数に対応する配列の各要素)
invokeListenerMethod
protected ObjectSE invokeListenerMethod(StringSE methodName, ObjectSE[] arguments, Message originalMessage)
指定されたリスナーメソッドを呼び出します。- パラメーター:
methodName
- リスナーメソッドの名前arguments
- 渡されるメッセージ引数originalMessage
- 元のメッセージ- 戻り値:
- リスナーメソッドから返された結果
- 関連事項:
getListenerMethodName(org.springframework.amqp.core.Message, java.lang.Object)
,buildListenerArguments(java.lang.Object, com.rabbitmq.client.Channel, org.springframework.amqp.core.Message)