クラス RedisMessageListenerContainer
- 実装されたすべてのインターフェース:
Aware
、BeanNameAware
、DisposableBean
、InitializingBean
、Lifecycle
、Phased
、SmartLifecycle
低レベルの 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
- 関連事項:
フィールドサマリー
フィールド修飾子と型フィールド説明static final long
デフォルトの回復間隔: 5000 ミリ秒 = 5 秒。static final long
デフォルトのサブスクリプション待機時間: 2000 ミリ秒 = 2 秒。static final StringSE
デフォルトのスレッド名プレフィックス: "RedisListeningContainer-"。protected final Log
サブクラスで利用可能なロガーインターフェース org.springframework.context.SmartLifecycle から継承されたフィールド
DEFAULT_PHASE
コンストラクターのサマリー
コンストラクターメソッドのサマリー
修飾子と型メソッド説明void
addMessageListener
(MessageListener listener, CollectionSE<? extends Topic> topics) メッセージリスナーを(実行中の可能性のある)コンテナーに追加します。void
addMessageListener
(MessageListener listener, Topic topic) メッセージリスナーを(実行中の可能性のある)コンテナーに追加します。void
protected TaskExecutor
デフォルトの TaskExecutor を作成します。void
destroy()
コンテナーを破棄して停止します。connectionFactory を返します。long
protected void
リスナーの実行中に発生した特定の例外を処理します。protected void
handleSubscriptionException
(CompletableFutureSE<VoidSE> future, BackOffExecution backOffExecution, ThrowableSE cause) サブスクリプションタスクの例外を処理します。protected void
invokeErrorHandler
(ThrowableSE cause) 登録済みの ErrorHandler があれば呼び出します。final boolean
isActive()
このコンテナーが現在アクティブであるかどうか、つまり、セットアップされているがまだシャットダウンされていないかどうかを返します。boolean
boolean
protected void
processMessage
(MessageListener listener, Message message, byte[] source) プロバイダーから受信したメッセージを処理します。void
removeMessageListener
(MessageListener listener) 指定されたメッセージリスナーを(すべてのトピックから)完全に削除します。void
removeMessageListener
(MessageListener listener, CollectionSE<? extends Topic> topics) 指定されたトピックからメッセージリスナーを削除します。void
removeMessageListener
(MessageListener listener, Topic topic) 指定されたトピックからメッセージリスナーを削除します。void
setBeanName
(StringSE name) void
setConnectionFactory
(RedisConnectionFactory connectionFactory) void
setErrorHandler
(ErrorHandler errorHandler) メッセージの処理中にキャッチされない例外がスローされた場合に呼び出されるように ErrorHandler を設定します。void
setMaxSubscriptionRegistrationWaitingTime
(long maxSubscriptionRegistrationWaitingTime) サブスクリプション登録を待機する最大時間をミリ秒単位で指定します。デフォルトは2000ms
、つまり 2 秒です。void
setMessageListeners
(MapSE<? extends MessageListener, CollectionSE<? extends Topic>> listeners) 指定されたリスナー(およびそのトピック)をコンテナーにアタッチします。void
setRecoveryBackoff
(BackOff recoveryInterval) BackOff
リカバリの試行間隔を指定してください。void
setRecoveryInterval
(long recoveryInterval) 回復試行の間隔をミリ秒単位で指定します。void
setSubscriptionExecutor
(ExecutorSE subscriptionExecutor) Redis チャネルのサブスクライブに使用されるタスク実行を設定します。void
setTaskExecutor
(ExecutorSE taskExecutor) メッセージの受信時にメッセージリスナーを実行するために使用されるタスクエグゼキュータを設定します。void
setTopicSerializer
(RedisSerializer<StringSE> serializer) Topic
を低レベルのチャネルとパターンに変換するためのシリアライザーを設定します。void
start()
コンテナーを始動し、コンテナーを始動する前にlisteners
が登録されている場合は、トピックをサブスクライブします。void
stop()
メッセージリスナーコンテナーを停止し、コンテナーがlistening
の場合は、サブスクリプションをキャンセルしてください。void
stop
(RunnableSE callback) メッセージリスナーコンテナーを停止し、コンテナーがlistening
の場合は、サブスクリプションをキャンセルしてください。クラス java.lang.ObjectSE から継承されたメソッド
clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, toString, wait, waitSE, waitSE
インターフェース org.springframework.context.SmartLifecycle から継承されたメソッド
getPhase, isAutoStartup
フィールドの詳細
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
デフォルトのスレッド名プレフィックス: "RedisListeningContainer-"。logger
サブクラスで利用可能なロガー
コンストラクターの詳細
RedisMessageListenerContainer
public RedisMessageListenerContainer()
メソッドの詳細
setErrorHandler
メッセージの処理中にスローされたキャッチされない例外が発生した場合に呼び出されるように ErrorHandler を設定します。デフォルトでは、ErrorHandler は存在しないため、エラーレベルのログが唯一の結果となります。setSubscriptionExecutor
Redis チャネルのサブスクライブに使用されるタスクの実行を設定します。デフォルトでは、エグゼキュータが設定されていない場合は、setTaskExecutor(Executor)
が使用されます。場合によっては、接続のリスニングは長時間実行されるタスクであるため、これは望ましくない場合があります。メモ: この実装では、長時間実行スレッド (リスナーが登録されているかどうかに応じて) を最大 1 つ、初期登録中に最大 2 つのスレッドを使用します。
- パラメーター:
subscriptionExecutor
- 設定する subscriptionExecutor。
setTaskExecutor
メッセージの受信時にメッセージリスナーを実行するために使用されるタスクエグゼキュータを設定します。タスクエグゼキュータが設定されていない場合、デフォルトでSimpleAsyncTaskExecutor
のインスタンスが使用されます。タスクエグゼキュータは、リスナーが行った作業と受信するメッセージの数に応じて調整できます。- パラメーター:
taskExecutor
- 設定する taskExecutor。
getConnectionFactory
connectionFactory を返します。- 戻り値:
- connectionFactory を返します
setConnectionFactory
- パラメーター:
connectionFactory
- 設定する connectionFactory。
setTopicSerializer
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
BackOff
リカバリの試行間隔を指定してください。setMessageListeners
public void setMessageListeners(MapSE<? extends MessageListener, CollectionSE<? extends Topic>> listeners) 指定されたリスナー(およびそのトピック)をコンテナーにアタッチします。メモ: コンテナーの実行中にこのメソッドを呼び出して、コンテナーの再初期化を強制することができます。ただし、これにより一部のメッセージが失われる可能性があることに注意してください(コンテナーの再初期化中に)。実行時にこのメソッドを呼び出すことは、高度な使用箇所と見なされます。
- パラメーター:
listeners
- メッセージリスナーとそれに関連するトピックのマップ
setBeanName
- 次で指定:
- インターフェース
BeanNameAware
のsetBeanName
afterPropertiesSet
public void afterPropertiesSet()- 次で指定:
- インターフェース
InitializingBean
のafterPropertiesSet
createDefaultTaskExecutor
デフォルトの TaskExecutor を作成します。明示的な TaskExecutor が指定されていない場合に呼び出されます。デフォルトの実装では、指定された Bean 名(または Bean 名が指定されていない場合はクラス名)をスレッド名の接頭辞として使用して
SimpleAsyncTaskExecutor
を構築します。destroy
コンテナーを破棄して停止します。- 次で指定:
- インターフェース
DisposableBean
のdestroy
- 例外:
ExceptionSE
start
public void start()コンテナーを始動し、コンテナーを始動する前にlisteners
が登録されている場合は、トピックをサブスクライブします。このメソッドは、前の
stop()
が終了し、以前に登録されたすべてのリスナーが正常にサブスクライブされるまでブロックする、潜在的にブロックする方法です。コンテナーがすでに実行されている場合、このメソッドへの複数の呼び出しは無視されます。このメソッドへの同時呼び出しは、コンテナーが起動されるまで同期されます。
stop
public void stop()stop
メッセージリスナーコンテナーを停止し、コンテナーがlistening
の場合は、サブスクリプションをキャンセルしてください。停止すると、割り当てられた接続が解放されます。このメソッドは、前の
start()
が終了するまで、およびコンテナーがリッスンしている場合は接続が閉じられるまでブロックする、潜在的にブロックするメソッドです。コンテナーがすでに停止している場合、このメソッドへの複数の呼び出しは無視されます。このメソッドへの同時呼び出しは、コンテナーが停止するまで同期されます。
- 次で指定:
- インターフェース
SmartLifecycle
のstop
- パラメーター:
callback
- コンテナーが実際に停止したときに通知するコールバック。
isRunning
public boolean isRunning()isListening
public boolean isListening()isActive
public final boolean isActive()このコンテナーが現在アクティブであるかどうか、つまり、セットアップされているがまだシャットダウンされていないかどうかを返します。addMessageListener
メッセージリスナーを(実行中の可能性のある)コンテナーに追加します。コンテナーが実行されている場合、リスナーはできるだけ早くメッセージの受信(一致)を開始します。- パラメーター:
listener
- メッセージリスナーtopics
- メッセージリスナートピック
addMessageListener
メッセージリスナーを(実行中の可能性のある)コンテナーに追加します。コンテナーが実行されている場合、リスナーはできるだけ早くメッセージの受信(一致)を開始します。- パラメーター:
listener
- メッセージリスナーtopic
- メッセージトピック
removeMessageListener
public void removeMessageListener(@Nullable MessageListener listener, CollectionSE<? extends Topic> topics) 指定されたトピックからメッセージリスナーを削除します。コンテナーが実行されている場合、リスナーはできるだけ早くメッセージの受信(一致)を停止します。このメソッドは Redis(p)unsubscribe セマンティクスに従うことに注意してください。つまり、空 /null コレクションはすべてのチャネルからリスナーを削除します。
- パラメーター:
listener
- メッセージリスナーtopics
- メッセージリスナーのトピック
removeMessageListener
指定されたトピックからメッセージリスナーを削除します。コンテナーが実行中の場合、リスナーはできるだけ早くメッセージの受信(一致)を停止します。このメソッドは Redis(p)unsubscribe セマンティクスに従うことに注意してください。つまり、空 /null コレクションはすべてのチャネルからリスナーを削除します。
- パラメーター:
listener
- メッセージリスナーtopic
- メッセージトピック
removeMessageListener
指定されたメッセージリスナーを(すべてのトピックから)完全に削除します。コンテナーが実行中の場合、リスナーはできるだけ早くメッセージの受信(一致)を停止します。- パラメーター:
listener
- メッセージリスナー
processMessage
プロバイダーから受信したメッセージを処理します。- パラメーター:
listener
- 通知するメッセージリスナー。message
- 受信したメッセージ。source
- ソース、チャネルまたはパターンのいずれか。- 関連事項:
handleListenerException
リスナーの実行中に発生した特定の例外を処理します。デフォルトの実装では、エラーレベルで例外がログに記録されます。これは、サブクラスでオーバーライドできます。
- パラメーター:
cause
- 処理する例外
invokeErrorHandler
登録されている ErrorHandler がある場合は、それを呼び出します。それ以外の場合は、エラーレベルでログに記録します。- パラメーター:
cause
- メッセージ処理中に発生した捕捉されなかったエラー。- 関連事項:
handleSubscriptionException
protected void handleSubscriptionException(CompletableFutureSE<VoidSE> future, BackOffExecution backOffExecution, ThrowableSE cause) サブスクリプションタスクの例外を処理します。例外が接続障害である場合(たとえば、Redis が再起動された場合)、サブスクリプションの再起動を試みます。- パラメーター:
cause
- スロー可能な例外