クラス DelayHandler
- 実装済みのインターフェース一覧:
EventListenerSE、org.reactivestreams.Subscriber<Message<?>>、Aware、BeanClassLoaderAware、BeanFactoryAware、BeanNameAware、DisposableBean、InitializingBean、ApplicationContextAware、ApplicationListener<ContextRefreshedEvent>、Ordered、ComponentSourceAware、ExpressionCapable、Orderable、MessageProducer、DelayHandlerManagement、HeaderPropagationAware、IntegrationPattern、NamedComponent、IntegrationManagement、TrackableComponent、MessageHandler、reactor.core.CoreSubscriber<Message<?>>
Message での delayExpression の評価結果、またはこのハンドラーで構成されたデフォルトの遅延値に基づいて、メッセージフローの継続を遅延させることができる MessageHandler。フローの継続は TaskScheduler に委譲されるため、呼び出しスレッドはブロックしないことに注意してください。このアプローチの利点は、ブロックされたスレッドの蓄積を生成することなく、非常に長い遅延であっても、多くの遅延を同時に管理できることです。ただし、アクティブなトランザクションコンテキストは、元の送信者から最終的な受信者に伝達されないことに注意してください。これは、異なるスレッドが制御されている遅延の後にメッセージを出力チャネルに渡すことの副作用です。
このハンドラーの delayExpression プロパティが構成されている場合、その評価結果値はハンドラーの defaultDelay 値よりも優先されます。実際の評価結果の値は、long、long として解析できる文字列、Date の場合があります。長い場合は、現在の時刻から数えてミリ秒単位で遅延する時間の長さとして解釈されます(たとえば、値 5000 は、現在の時刻から 5 秒でメッセージを解放できることを示します)。値が日付の場合、少なくともその日付が発生するまで遅延します(つまり、その場合の遅延は headerDate.getTime() - new Date().getTime() と同等です)。
遅延メッセージは、専用グループとして MessageGroupStore に保存されます。外部永続ストアが提供されている場合、これらの遅延メッセージはアプリケーションの起動後に再スケジュールされます。messageGroupId は必須のオプションであり、ストアからの作業の盗用や予期しないリリースを回避するために、遅延構成ごとに一意である必要があります。同じディレイラーの異なるインスタンスは、ストア内の同じメッセージグループを指すことができます。messageGroupId は、生成される可能性のある Bean 名に依存できません。アプリケーションの再起動後、Bean は別の生成名を取得する可能性があり、そのグループはアプリケーションによって管理されなくなるため、その遅延メッセージは再スケジュールから失われる可能性があります。
- 導入:
- 1.0.3
- 作成者:
- Mark Fisher, Artem Bilan, Gary Russell, Christian Tzolov, Youbin Wu
ネストされたクラスの概要
ネストされたクラスクラス org.springframework.integration.handler.AbstractReplyProducingMessageHandler から継承されたネストクラス / インターフェース
AbstractReplyProducingMessageHandler.RequestHandlerインターフェース org.springframework.integration.support.management.IntegrationManagement から継承されたネストクラス / インターフェース
IntegrationManagement.ManagementOverridesフィールド概要
フィールドクラス org.springframework.integration.handler.AbstractMessageProducingHandler から継承されたフィールド
messagingTemplateクラス org.springframework.integration.context.IntegrationObjectSupport から継承されたフィールド
EXPRESSION_PARSER, loggerインターフェース org.springframework.integration.support.management.IntegrationManagement から継承されたフィールド
METER_PREFIX, RECEIVE_COUNTER_NAME, SEND_TIMER_NAMEインターフェース org.springframework.core.Ordered から継承されたフィールド
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCEコンストラクター概要
コンストラクターコンストラクター説明デフォルトのオプションを使用してインスタンスを構築します。DelayHandler(StringSE messageGroupId) 指定された "messageGroupId" を使用して DelayHandler を作成し、これをMessageGroupの「キー」として使用して、遅延されたメッセージをMessageGroupStoreに格納します。DelayHandler(StringSE messageGroupId, TaskScheduler taskScheduler) 指定されたデフォルトの遅延で DelayHandler を作成します。方法の概要
修飾子と型メソッド説明protected voiddoInit()intこのコンポーネントが実装するパターン型を返します。protected @Nullable ObjectSEhandleRequestMessage(Message<?> requestMessage) 'requestMessage' が以前に遅延されていなかったかどうかを確認します (releaseMessageAfterDelay(org.springframework.messaging.Message<?>, long)およびDelayHandler.DelayedMessageWrapper)。voidContextRefreshedEventを処理して、アプリケーションコンテキストの起動後できるだけ遅くreschedulePersistedMessages()を呼び出します。protected voidrescheduleAt(Message<?> message, DateSE startTime) void'messageStore' 内の永続的なメッセージを読み取って再スケジュールするために使用されます (例:voidsetDefaultDelay(long defaultDelay) デフォルトの遅延をミリ秒単位で設定します。voidsetDelayedAdviceChain(ListSE<Advice> delayedAdviceChain) List<Advice>を指定して、DelayHandler.ReleaseMessageHandlerプロキシに通知します。voidsetDelayedMessageErrorChannel(MessageChannel delayedMessageErrorChannel) リリースされたメッセージの送信に失敗した場合にErrorMessageが送信されるメッセージチャネルを設定します。voidsetDelayedMessageErrorChannelName(StringSE delayedMessageErrorChannelName) 解放されたメッセージの送信に失敗した場合にErrorMessageが送信されるメッセージチャネル名を設定します。voidsetDelayExpression(Expression delayExpression) 遅延期間(ミリ秒単位)または遅延する日付をチェックする必要があるExpressionを指定します。voidsetDelayExpressionString(StringSE delayExpression) 遅延期間(ミリ秒単位)または遅延する日付をチェックする必要があるExpressionを指定します。voidsetIgnoreExpressionFailures(boolean ignoreExpressionFailures) delayExpression評価によってスローされたExceptionsを無視するかどうかを指定します(ログに記録されるだけです)。voidsetMaxAttempts(int maxAttempts) メッセージのリリースが失敗した場合のリリース試行の最大回数を設定します。voidsetMessageGroupId(StringSE messageGroupId) このハンドラーで遅延メッセージを管理するためのグループ ID を設定します。voidsetMessageStore(MessageGroupStore messageStore) 遅延を待機している間にメッセージを保管するために使用する必要があるMessageGroupStoreを指定します。voidsetRetryDelay(long retryDelay) リリース失敗後に再試行するときに適用する追加の遅延を設定します。protected booleanサブクラスはこれをオーバーライドできます。クラス org.springframework.integration.handler.AbstractReplyProducingMessageHandler から継承されたメソッド
doInvokeAdvisedRequestHandler, getBeanClassLoader, getRequiresReply, handleMessageInternal, hasAdviceChain, onInit, setAdviceChain, setBeanClassLoader, setRequiresReplyクラス org.springframework.integration.handler.AbstractMessageProducingHandler から継承されたメソッド
addNotPropagatedHeaders, createOutputMessage, getNotPropagatedHeaders, getOutputChannel, isAsync, messageBuilderForReply, produceOutput, resolveErrorChannel, sendErrorMessage, sendOutput, sendOutputs, setAsync, setNotPropagatedHeaders, setOutputChannel, setOutputChannelName, setSendTimeout, setupMessageProcessor, shouldSplitOutput, updateNotPropagatedHeadersクラス org.springframework.integration.handler.AbstractMessageHandler から継承されたメソッド
handleMessage, onComplete, onError, onNext, onSubscribe, setObservationConventionクラス org.springframework.integration.handler.MessageHandlerSupport から継承されたメソッド
buildSendTimer, destroy, getManagedName, getManagedType, getMetricsCaptor, getObservationRegistry, getOrder, getOverrides, isLoggingEnabled, isObserved, registerMetricsCaptor, registerObservationRegistry, sendTimer, setLoggingEnabled, setManagedName, setManagedType, setOrder, setShouldTrack, shouldTrackクラス org.springframework.integration.context.IntegrationObjectSupport から継承されたメソッド
afterPropertiesSet, extractTypeIfPossible, generateId, getApplicationContext, getApplicationContextId, getBeanDescription, getBeanFactory, getBeanName, getChannelResolver, getComponentDescription, getComponentName, getComponentSource, getConversionService, getExpression, getIntegrationProperties, getMessageBuilderFactory, getTaskScheduler, isInitialized, setApplicationContext, setBeanFactory, setBeanName, setChannelResolver, setComponentDescription, setComponentName, setComponentSource, setConversionService, setMessageBuilderFactory, setPrimaryExpression, setTaskScheduler, toStringクラス java.lang.ObjectSE から継承されたメソッド
clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, wait, waitSE, waitSEインターフェース org.springframework.context.ApplicationListener から継承されたメソッド
supportsAsyncExecutionインターフェース reactor.core.CoreSubscriber から継承されたメソッド
currentContextインターフェース org.springframework.integration.support.management.IntegrationManagement から継承されたメソッド
getThisAsインターフェース org.springframework.integration.support.context.NamedComponent から継承されたメソッド
getBeanName, getComponentName
フィールドの詳細
コンストラクターの詳細
DelayHandler
public DelayHandler()デフォルトのオプションを使用してインスタンスを構築します。messageGroupIdは setter 経由で提供する必要があります。- 導入:
- 6.2
DelayHandler
指定された "messageGroupId" を使用して DelayHandler を作成し、MessageGroupが遅延メッセージをMessageGroupStoreに保存するための「キー」として使用します。遅延後のメッセージの送信は、ApplicationContext のデフォルトThreadPoolTaskSchedulerに登録されて処理されます。- パラメーター:
messageGroupId- メッセージグループ識別子。- 関連事項:
DelayHandler
指定されたデフォルトの遅延で DelayHandler を作成します。遅延後のメッセージの送信は、提供されたTaskSchedulerによって処理されます。- パラメーター:
messageGroupId- メッセージグループ識別子。taskScheduler- タスクスケジューラ。
方法の詳細
setMessageGroupId
このハンドラーで遅延メッセージを管理するためのグループ ID を設定します。必須。- パラメーター:
messageGroupId- 遅延メッセージのグループ ID。- 導入:
- 6.2
setDefaultDelay
public void setDefaultDelay(long defaultDelay) デフォルトの遅延をミリ秒単位で設定します。delayExpressionプロパティが指定されていない場合、デフォルトの遅延がすべてのメッセージに適用されます。評価結果がdelayExpressionのメッセージにのみ遅延を適用する必要がある場合は、この値を 0 に設定します。- パラメーター:
defaultDelay- ミリ秒単位のデフォルトの遅延。
setDelayExpression
遅延期間(ミリ秒単位)または遅延する日付をチェックする必要があるExpressionを指定します。このプロパティが設定されている場合、式の評価の結果(null でない場合)は、このハンドラーのデフォルトの遅延よりも優先されます。- パラメーター:
delayExpression- 遅延式。
setDelayExpressionString
遅延期間(ミリ秒単位)または遅延する日付をチェックする必要があるExpressionを指定します。このプロパティが設定されている場合、式の評価の結果(null でない場合)は、このハンドラーのデフォルトの遅延よりも優先されます。- パラメーター:
delayExpression- 遅延式。- 導入:
- 5.0
setIgnoreExpressionFailures
public void setIgnoreExpressionFailures(boolean ignoreExpressionFailures) delayExpression評価によってスローされたExceptionsを無視するかどうか (ログに記録されるだけ) を指定します。この場合、遅延器はdefaultDelayにフォールバックします。このプロパティがfalseとして指定されている場合、delayExpression評価ExceptionはdefaultDelayにフォールバックせずに呼び出し元にスローされます。デフォルトはtrueです。- パラメーター:
ignoreExpressionFailures- 式の評価の失敗を無視する必要がある場合は true。- 関連事項:
determineDelayForMessage(org.springframework.messaging.Message<?>)
setMessageStore
遅延を待機している間にメッセージを保管するために使用する必要があるMessageGroupStoreを指定します。- パラメーター:
messageStore- メッセージストア。
setDelayedAdviceChain
List<Advice>を指定して、DelayHandler.ReleaseMessageHandlerプロキシに通知します。通常、トランザクションメッセージストアから取得した遅延メッセージにトランザクションを追加するために使用されます。- パラメーター:
delayedAdviceChain- アドバイスチェーン。- 関連事項:
createReleaseMessageTask()
setDelayedMessageErrorChannel
リリースされたメッセージの送信に失敗した場合にErrorMessageが送信されるメッセージチャネルを設定します。エラーフローが正常に戻った場合、リリースは完了です。エラーフローが例外をスローした場合、リリースは再試行されます。リリースタスクに関するトランザクションアドバイスがある場合、エラーフローはトランザクション内で呼び出されます。- パラメーター:
delayedMessageErrorChannel- チャンネル。- 導入:
- 5.0.8
- 関連事項:
setDelayedMessageErrorChannelName
解放されたメッセージの送信に失敗した場合にErrorMessageが送信されるメッセージチャネル名を設定します。エラーフローが正常に戻った場合、リリースは完了です。エラーフローが例外をスローした場合、リリースは再試行されます。リリースタスクに関するトランザクションアドバイスがある場合、エラーフローはトランザクション内で呼び出されます。- パラメーター:
delayedMessageErrorChannelName- チャンネル名。- 導入:
- 5.0.8
- 関連事項:
setMaxAttempts
public void setMaxAttempts(int maxAttempts) メッセージのリリースが失敗した場合の最大リリース試行回数を設定します。デフォルトは 5 です。- パラメーター:
maxAttempts- 最大試行回数。- 導入:
- 5.0.8
- 関連事項:
setRetryDelay
public void setRetryDelay(long retryDelay) リリースが失敗した後に再試行するときに適用する追加の遅延を設定します。デフォルトの 1000L。- パラメーター:
retryDelay- 再試行遅延。- 導入:
- 5.0.8
- 関連事項:
getComponentType
- 次で指定:
- インターフェース
NamedComponent内のgetComponentType - オーバーライド:
- クラス
MessageHandlerSupportのgetComponentType
getIntegrationPatternType
インターフェースからコピーされた説明:IntegrationPatternこのコンポーネントが実装するパターン型を返します。- 次で指定:
- インターフェース
IntegrationPattern内のgetIntegrationPatternType - オーバーライド:
- クラス
AbstractReplyProducingMessageHandlerのgetIntegrationPatternType - 戻り値:
- このコンポーネントが実装する
IntegrationPatternType
doInit
protected void doInit()- オーバーライド:
- クラス
AbstractReplyProducingMessageHandlerのdoInit
shouldCopyRequestHeaders
protected boolean shouldCopyRequestHeaders()クラスからコピーされた説明:AbstractMessageProducingHandlerサブクラスはこれをオーバーライドできます。デフォルトでは true。- オーバーライド:
- クラス
AbstractMessageProducingHandlerのshouldCopyRequestHeaders - 戻り値:
- リクエストヘッダーをコピーする必要がある場合は true。
handleRequestMessage
'requestMessage' が(releaseMessageAfterDelay(org.springframework.messaging.Message<?>, long)とDelayHandler.DelayedMessageWrapper)以前に遅延していないか確認します。次に、'requestMessage' (determineDelayForMessage(org.springframework.messaging.Message<?>))の 'delay' を決定し、delay > 0が 'delay' の後に 'releaseMessage' タスクをスケジュールするかどうかを確認します。- 次で指定:
- クラス
AbstractReplyProducingMessageHandlerのhandleRequestMessage - パラメーター:
requestMessage- - 遅延する可能性のあるメッセージ。- 戻り値:
- - 'requestMessage' が遅延している場合は
null、それ以外の場合は 'requestMessage' からの 'payload'。 - 関連事項:
releaseMessage(org.springframework.messaging.Message<?>)
rescheduleAt
getDelayedMessageCount
public int getDelayedMessageCount()- 次で指定:
- インターフェース
DelayHandlerManagement内のgetDelayedMessageCount
reschedulePersistedMessages
public void reschedulePersistedMessages()'messageStore' に永続化されたメッセージを読み取り、アプリケーションの再起動時などに再スケジュールするために使用されます。このロジックはmessageGroup.getMessages()の反復処理に基づいており、'delay' ロジック用のタスクをスケジュールします。この動作は、呼び出しスレッドのオーバーロードを回避するために決定されます。- 次で指定:
- インターフェース
DelayHandlerManagement内のreschedulePersistedMessages
onApplicationEvent
アプリケーションコンテキストの起動後、できるだけ遅くreschedulePersistedMessages()を呼び出すためにContextRefreshedEventを処理します。また、Spring-MVC アプリケーションなどの 'parent-child' コンテキストで公開される可能性のある他のContextRefreshedEventを無視するためにinitializedをチェックします。- 次で指定:
- インターフェース
ApplicationListener<ContextRefreshedEvent>内のonApplicationEvent - パラメーター:
event- - アプリケーションコンテキストが完全に初期化された後に発生するContextRefreshedEvent。- 関連事項: