クラス RedisMessageListenerContainer

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

public class RedisMessageListenerContainer extends ObjectSE implements InitializingBean, DisposableBean, BeanNameAware, SmartLifecycle
Redis メッセージリスナーに非同期動作を提供するコンテナー。リスニング、変換、メッセージディスパッチの低レベルの詳細を処理します。

低レベルの Redis(サブスクリプションごとに 1 つの接続)とは対照的に、コンテナーは、登録されたすべてのリスナーに対して「多重化」された 1 つの接続のみを使用し、メッセージのディスパッチは task executor を介して行われます。スレッドプールの再利用にデフォルトの SimpleAsyncTaskExecutor を使用する代わりに、タスクエグゼキューター(およびブロッキング Redis コネクターを使用する場合はサブスクリプションエグゼキューター)を構成することをお勧めします。

コンテナーは、単一の Redis 接続を遅延的に使用します(接続は、少なくとも 1 つのリスナーが構成されている場合にのみ使用されます)。リスナーは、starting コンテナーの前に先行して登録して、起動時に登録されたすべてのトピックをサブスクライブできます。リスナーは、start() メソッドが戻った後にサブスクライブされることが保証されています。

サブスクリプションは、最大試行回数に達するまで setRecoveryInterval(long) を介して構成できる BackOff を使用して正常に再試行されます。リスナーエラーは、構成されている場合は ErrorHandler を介して処理されます。

このクラスは、afterPropertiesSet() および start() でコンテナーを初期化した後に同時に使用でき、外部同期なしで addMessageListener(org.springframework.data.redis.connection.MessageListener, java.util.Collection<? extends org.springframework.data.redis.listener.Topic>) および removeMessageListener(org.springframework.data.redis.connection.MessageListener, java.util.Collection<? extends org.springframework.data.redis.listener.Topic>) への同時呼び出しを可能にします。

subscribe/unsubscribe コマンドにレスポンスして subscription/unsubscription コールバックを受信したい Listeners は、SubscriptionListener を実装できます。

作成者:
Costin Leau, Jennifer Hickey, Way Joke, Thomas Darimont, Mark Paluch, John Blum
関連事項:
  • フィールドの詳細

    • DEFAULT_RECOVERY_INTERVAL

      public static final long DEFAULT_RECOVERY_INTERVAL
      デフォルトの回復間隔: 5000 ミリ秒 = 5 秒。
      関連事項:
    • DEFAULT_SUBSCRIPTION_REGISTRATION_WAIT_TIME

      public static final long DEFAULT_SUBSCRIPTION_REGISTRATION_WAIT_TIME
      デフォルトのサブスクリプション待機時間: 2000 ミリ秒 = 2 秒。
      関連事項:
    • DEFAULT_THREAD_NAME_PREFIX

      public static final StringSE DEFAULT_THREAD_NAME_PREFIX
      デフォルトのスレッド名プレフィックス: "RedisListeningContainer-"。
    • logger

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

    • RedisMessageListenerContainer

      public RedisMessageListenerContainer()
  • メソッドの詳細

    • setErrorHandler

      public void setErrorHandler(ErrorHandler errorHandler)
      メッセージの処理中にスローされたキャッチされない例外が発生した場合に呼び出されるように ErrorHandler を設定します。デフォルトでは、ErrorHandler は存在しないため、エラーレベルのログが唯一の結果となります。
    • setSubscriptionExecutor

      public void setSubscriptionExecutor(ExecutorSE subscriptionExecutor)
      Redis チャネルのサブスクライブに使用されるタスクの実行を設定します。デフォルトでは、エグゼキュータが設定されていない場合は、setTaskExecutor(Executor) が使用されます。場合によっては、接続のリスニングは長時間実行されるタスクであるため、これは望ましくない場合があります。

      メモ: この実装では、長時間実行スレッド (リスナーが登録されているかどうかに応じて) を最大 1 つ、初期登録中に最大 2 つのスレッドを使用します。

      パラメーター:
      subscriptionExecutor - 設定する subscriptionExecutor。
    • setTaskExecutor

      public void setTaskExecutor(ExecutorSE taskExecutor)
      メッセージの受信時にメッセージリスナーを実行するために使用されるタスクエグゼキュータを設定します。タスクエグゼキュータが設定されていない場合、デフォルトで SimpleAsyncTaskExecutor のインスタンスが使用されます。タスクエグゼキュータは、リスナーが行った作業と受信するメッセージの数に応じて調整できます。
      パラメーター:
      taskExecutor - 設定する taskExecutor。
    • getConnectionFactory

      @Nullable public RedisConnectionFactory getConnectionFactory()
      connectionFactory を返します。
      戻り値:
      connectionFactory を返します
    • setConnectionFactory

      public void setConnectionFactory(RedisConnectionFactory connectionFactory)
      パラメーター:
      connectionFactory - 設定する connectionFactory。
    • setTopicSerializer

      public void setTopicSerializer(RedisSerializer<StringSE> serializer)
      Topic を低レベルのチャネルとパターンに変換するためのシリアライザーを設定します。デフォルトでは、StringRedisSerializer が使用されます。
      パラメーター:
      serializer - 設定するシリアライザー。
    • getMaxSubscriptionRegistrationWaitingTime

      public long getMaxSubscriptionRegistrationWaitingTime()
    • setMaxSubscriptionRegistrationWaitingTime

      public void setMaxSubscriptionRegistrationWaitingTime(long maxSubscriptionRegistrationWaitingTime)
      サブスクリプション登録を待機する最大時間をミリ秒単位で指定します。デフォルトは 2000ms、つまり 2 秒です。タイムアウトは、サブスクリプション登録の待機に適用されます。サブスクリプションは非同期で作成でき、期限切れのタイムアウトはタイムアウトをキャンセルしないことに注意してください。
      パラメーター:
      maxSubscriptionRegistrationWaitingTime - サブスクリプション登録の最大待機時間
      関連事項:
    • setRecoveryInterval

      public void setRecoveryInterval(long recoveryInterval)
      回復試行の間隔をミリ秒単位で指定します。デフォルトは 5000 ミリ秒、つまり 5 秒です。
      関連事項:
    • setRecoveryBackoff

      public void setRecoveryBackoff(BackOff recoveryInterval)
      BackOff リカバリの試行間隔を指定してください。
      導入:
      2.7
      関連事項:
    • setMessageListeners

      public void setMessageListeners(MapSE<? extends MessageListener,CollectionSE<? extends Topic>> listeners)
      指定されたリスナー(およびそのトピック)をコンテナーにアタッチします。

      メモ: コンテナーの実行中にこのメソッドを呼び出して、コンテナーの再初期化を強制することができます。ただし、これにより一部のメッセージが失われる可能性があることに注意してください(コンテナーの再初期化中に)。実行時にこのメソッドを呼び出すことは、高度な使用箇所と見なされます。

      パラメーター:
      listeners - メッセージリスナーとそれに関連するトピックのマップ
    • setBeanName

      public void setBeanName(StringSE name)
      次で指定:
      インターフェース BeanNameAwaresetBeanName 
    • afterPropertiesSet

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

      protected TaskExecutor createDefaultTaskExecutor()
      デフォルトの TaskExecutor を作成します。明示的な TaskExecutor が指定されていない場合に呼び出されます。

      デフォルトの実装では、指定された Bean 名(または Bean 名が指定されていない場合はクラス名)をスレッド名の接頭辞として使用して SimpleAsyncTaskExecutor を構築します。

      関連事項:
    • destroy

      public void destroy() throws ExceptionSE
      コンテナーを破棄して停止します。
      次で指定:
      インターフェース DisposableBeandestroy 
      例外:
      ExceptionSE
    • start

      public void start()
      コンテナーを始動し、コンテナーを始動する前に listeners が登録されている場合は、トピックをサブスクライブします。

      このメソッドは、前の stop() が終了し、以前に登録されたすべてのリスナーが正常にサブスクライブされるまでブロックする、潜在的にブロックする方法です。

      コンテナーがすでに実行されている場合、このメソッドへの複数の呼び出しは無視されます。このメソッドへの同時呼び出しは、コンテナーが起動されるまで同期されます。

      次で指定:
      インターフェース Lifecyclestart 
      関連事項:
    • stop

      public void stop()
      メッセージリスナーコンテナーを停止し、コンテナーが listening の場合は、サブスクリプションをキャンセルしてください。停止すると、割り当てられた接続が解放されます。

      このメソッドは、前の start() が終了するまで、およびコンテナーがリッスンしている場合は接続が閉じられるまでブロックする、潜在的にブロックするメソッドです。

      コンテナーがすでに停止している場合、このメソッドへの複数の呼び出しは無視されます。このメソッドへの同時呼び出しは、コンテナーが停止するまで同期されます。

      次で指定:
      インターフェース Lifecyclestop 
    • stop

      public void stop(RunnableSE callback)
      メッセージリスナーコンテナーを停止し、コンテナーが listening の場合は、サブスクリプションをキャンセルしてください。停止すると、割り当てられた接続が解放されます。

      このメソッドは、前の start() が終了するまで、およびコンテナーがリッスンしている場合は接続が閉じられるまでブロックする、潜在的にブロックするメソッドです。

      コンテナーがすでに停止している場合、このメソッドへの複数の呼び出しは無視されます。このメソッドへの同時呼び出しは、コンテナーが停止するまで同期されます。

      次で指定:
      インターフェース SmartLifecyclestop 
      パラメーター:
      callback - コンテナーが実際に停止したときに通知するコールバック。
    • isRunning

      public boolean isRunning()
      次で指定:
      インターフェース LifecycleisRunning 
    • isListening

      public boolean isListening()
    • isActive

      public final boolean isActive()
      このコンテナーが現在アクティブであるかどうか、つまり、セットアップされているがまだシャットダウンされていないかどうかを返します。
    • addMessageListener

      public void addMessageListener(MessageListener listener, CollectionSE<? extends Topic> topics)
      メッセージリスナーを(実行中の可能性のある)コンテナーに追加します。コンテナーが実行されている場合、リスナーはできるだけ早くメッセージの受信(一致)を開始します。
      パラメーター:
      listener - メッセージリスナー
      topics - メッセージリスナートピック
    • addMessageListener

      public void addMessageListener(MessageListener listener, Topic topic)
      メッセージリスナーを(実行中の可能性のある)コンテナーに追加します。コンテナーが実行されている場合、リスナーはできるだけ早くメッセージの受信(一致)を開始します。
      パラメーター:
      listener - メッセージリスナー
      topic - メッセージトピック
    • removeMessageListener

      public void removeMessageListener(@Nullable MessageListener listener, CollectionSE<? extends Topic> topics)
      指定されたトピックからメッセージリスナーを削除します。コンテナーが実行されている場合、リスナーはできるだけ早くメッセージの受信(一致)を停止します。

      このメソッドは Redis(p)unsubscribe セマンティクスに従うことに注意してください。つまり、空 /null コレクションはすべてのチャネルからリスナーを削除します。

      パラメーター:
      listener - メッセージリスナー
      topics - メッセージリスナーのトピック
    • removeMessageListener

      public void removeMessageListener(@Nullable MessageListener listener, Topic topic)
      指定されたトピックからメッセージリスナーを削除します。コンテナーが実行中の場合、リスナーはできるだけ早くメッセージの受信(一致)を停止します。

      このメソッドは Redis(p)unsubscribe セマンティクスに従うことに注意してください。つまり、空 /null コレクションはすべてのチャネルからリスナーを削除します。

      パラメーター:
      listener - メッセージリスナー
      topic - メッセージトピック
    • removeMessageListener

      public void removeMessageListener(MessageListener listener)
      指定されたメッセージリスナーを(すべてのトピックから)完全に削除します。コンテナーが実行中の場合、リスナーはできるだけ早くメッセージの受信(一致)を停止します。
      パラメーター:
      listener - メッセージリスナー
    • processMessage

      protected void processMessage(MessageListener listener, Message message, byte[] source)
      プロバイダーから受信したメッセージを処理します。
      パラメーター:
      listener - 通知するメッセージリスナー。
      message - 受信したメッセージ。
      source - ソース、チャネルまたはパターンのいずれか。
      関連事項:
    • handleListenerException

      protected void handleListenerException(ThrowableSE cause)
      リスナーの実行中に発生した特定の例外を処理します。

      デフォルトの実装では、エラーレベルで例外がログに記録されます。これは、サブクラスでオーバーライドできます。

      パラメーター:
      cause - 処理する例外
    • invokeErrorHandler

      protected void invokeErrorHandler(ThrowableSE cause)
      登録されている ErrorHandler がある場合は、それを呼び出します。それ以外の場合は、エラーレベルでログに記録します。
      パラメーター:
      cause - メッセージ処理中に発生した捕捉されなかったエラー。
      関連事項:
    • handleSubscriptionException

      protected void handleSubscriptionException(CompletableFutureSE<VoidSE> future, BackOffExecution backOffExecution, ThrowableSE cause)
      サブスクリプションタスクの例外を処理します。例外が接続障害である場合(たとえば、Redis が再起動された場合)、サブスクリプションの再起動を試みます。
      パラメーター:
      cause - スロー可能な例外