クラス MessageListenerAdapter

java.lang.ObjectSE
org.springframework.data.redis.listener.adapter.MessageListenerAdapter
実装されたすべてのインターフェース:
InitializingBeanMessageListener

public class MessageListenerAdapter extends ObjectSE implements InitializingBean, MessageListener
柔軟なメッセージ型変換を使用して、リフレクションを介してメッセージの処理をターゲットリスナーメソッドに委譲するメッセージリスナーアダプター。リスナーメソッドが Redis API から完全に独立して、メッセージコンテンツ型を操作できるようにします。

アダプターのすべてのパラメーターを設定した後、必ず afterPropertiesSet() を呼び出してください。

基礎となる「デリゲート」が MessageListener を実装している場合、アダプターはそれにデリゲートし、無効なメソッドを指定できるようにすることに注意してください。ただし、そうでない場合、メソッドは必須になります。この寛大な動作により、アダプターを既存のリスナーとメッセージ POJO 全体で均一に使用できます。

Spring Framework の JMS MessageListenerAdapter を可能な限りモデル化。

デフォルトでは、受信 Redis メッセージのコンテンツは、ターゲットリスナーメソッドに渡される前に抽出され、ターゲットメソッドが生の Message ではなく文字列やバイト配列などのメッセージコンテンツ型で動作できるようにします。メッセージ型の変換は、Spring Data RedisSerializer に委譲されます。デフォルトでは、JdkSerializationRedisSerializer が使用されます。(このような自動メッセージ変換を行わない場合は、必ず Serializer を null に設定してください。)

このアダプタークラスに準拠するメソッドシグネチャーの例を以下に示します。この最初の例では、すべての Message 型を処理し、各 Message 型の内容を引数として渡します。

 public interface MessageContentsDelegate {
        void handleMessage(String text);

        void handleMessage(byte[] bytes);

        void handleMessage(Person obj);
 }
 

さらに、メッセージの送信先のチャネルまたはパターンを、String 型の 2 番目の引数としてメソッドに渡すことができます。

 public interface MessageContentsDelegate {
        void handleMessage(String text, String channel);

        void handleMessage(byte[] bytes, String pattern);
 }
 
さらなる例と議論については、このクラス(およびそれに付随する構成)を詳細に説明している Spring Data リファレンスドキュメントを参照してください。 重要 : メッセージの性質上、アダプターが使用するデフォルトのシリアライザーは StringRedisSerializer です。メッセージの型が異なる場合は、setSerializer(RedisSerializer) を使用してメッセージを適宜変更してください。
作成者:
Juergen Hoeller, Costin Leau, Greg Turnquist, Thomas Darimont, Christoph Strobl, Mark Paluch
  • フィールドの詳細

    • ORIGINAL_DEFAULT_LISTENER_METHOD

      public static final StringSE ORIGINAL_DEFAULT_LISTENER_METHOD
      デフォルトのリスナーメソッド "handleMessage" のすぐに使える値。
      関連事項:
    • logger

      protected final Log logger
      サブクラスで利用可能なロガー
  • コンストラクターの詳細

  • メソッドの詳細

    • setDelegate

      public void setDelegate(ObjectSE delegate)
      リスニングするメッセージを委譲するターゲットオブジェクトを設定します。指定したリスナーメソッドは、このターゲットオブジェクトに存在する必要があります。

      明示的なデリゲートオブジェクトが指定されていない場合、リスナーメソッドは、このアダプターインスタンス(つまり、このアダプターのカスタムサブクラス)に存在し、リスナーメソッドを定義することが想定されています。

      パラメーター:
      delegate - デリゲートオブジェクト
    • getDelegate

      @Nullable public ObjectSE getDelegate()
      リッスンしているメッセージを委譲するターゲットオブジェクトを返します。
      戻り値:
      メッセージリスニング代表団
    • setDefaultListenerMethod

      public void setDefaultListenerMethod(StringSE defaultListenerMethod)
      特定のリスナーメソッドが決定されていない場合に、委譲先のデフォルトリスナーメソッドの名前を指定します。デフォルトの値は "handleMessage" です。
      関連事項:
    • getDefaultListenerMethod

      protected StringSE getDefaultListenerMethod()
      委譲先のデフォルトのリスナーメソッドの名前を返します。
    • setSerializer

      public void setSerializer(RedisSerializer<?> serializer)
      受信 RAW Redis メッセージをリスナーメソッド引数に変換するシリアライザーを設定します。

      デフォルトのコンバーターは StringRedisSerializer です。

      パラメーター:
      serializer -
    • setStringSerializer

      public void setStringSerializer(RedisSerializer<StringSE> serializer)
      チャネル / パターンを文字列に変換するために使用されるシリアライザーを設定します。

      デフォルトのコンバーターは StringRedisSerializer です。

      パラメーター:
      serializer -
    • afterPropertiesSet

      public void afterPropertiesSet()
      次で指定:
      インターフェース InitializingBeanafterPropertiesSet 
    • onMessage

      public void onMessage(Message message, @Nullable byte[] pattern)
      標準の Redis MessageListener エントリポイント。

      メッセージ引数を適切に変換して、メッセージをターゲットリスナメソッドに委譲します。例外の場合、handleListenerException(Throwable) メソッドが呼び出されます。

      次で指定:
      インターフェース MessageListeneronMessage 
      パラメーター:
      message - 受信 Redis メッセージ
      pattern - チャネルに一致するパターン (指定されている場合) - null でもかまいません。
      関連事項:
    • initDefaultStrategies

      protected void initDefaultStrategies()
      アダプターの戦略のデフォルトの実装を初期化します。
      関連事項:
    • handleListenerException

      protected void handleListenerException(ThrowableSE ex)
      リスナーの実行中に発生した特定の例外を処理します。デフォルトの実装では、エラーレベルで例外が記録されます。
      パラメーター:
      ex - 処理する例外
    • extractMessage

      protected ObjectSE extractMessage(Message message)
      指定された Redis メッセージからメッセージ本文を抽出します。
      パラメーター:
      message - Redis Message
      戻り値:
      メッセージの内容。引数としてリスナーメソッドに渡されます
    • getListenerMethodName

      protected StringSE getListenerMethodName(Message originalMessage, ObjectSE extractedMessage)
      指定されたメッセージを処理することになっているリスナーメソッドの名前を決定します。

      デフォルトの実装は、構成されているデフォルトのリスナーメソッドがあれば、それを返すだけです。

      パラメーター:
      originalMessage - Redis リクエストメッセージ
      extractedMessage - 変換された Redis リクエストメッセージ。引数としてリスナーメソッドに渡されます
      戻り値:
      リスナーメソッドの名前 (非 null)
      関連事項:
    • invokeListenerMethod

      protected void invokeListenerMethod(StringSE methodName, ObjectSE[] arguments)
      指定されたリスナーメソッドを呼び出します。
      パラメーター:
      methodName - リスナーメソッドの名前
      arguments - 渡されるメッセージ引数
      関連事項: