クラス DelayHandler
- 実装されたすべてのインターフェース:
EventListenerSE
、org.reactivestreams.Subscriber<Message<?>>
、Aware
、BeanClassLoaderAware
、BeanFactoryAware
、BeanNameAware
、DisposableBean
、InitializingBean
、ApplicationContextAware
、ApplicationListener<ContextRefreshedEvent>
、Ordered
、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
ネストされたクラスのサマリー
ネストされたクラスクラス 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) MessageGroup
の「キー」として使用される指定された "messageGroupId" を使用して DelayHandler を作成し、遅延メッセージをMessageGroupStore
に格納します。DelayHandler
(StringSE messageGroupId, TaskScheduler taskScheduler) 指定されたデフォルトの遅延で DelayHandler を作成します。メソッドのサマリー
修飾子と型メソッド説明protected void
doInit()
サブクラスはこのメソッドを実装して、コンポーネント型情報を提供できます。int
このコンポーネントが実装するパターン型を返します。protected ObjectSE
handleRequestMessage
(Message<?> requestMessage) 'requestMessage' が以前に遅延されていないかどうかを確認します(releaseMessageAfterDelay(org.springframework.messaging.Message<?>, long)
およびDelayHandler.DelayedMessageWrapper
)。void
ContextRefreshedEvent
を処理して、アプリケーションコンテキストの起動後できるだけ遅くreschedulePersistedMessages()
を呼び出します。protected void
rescheduleAt
(Message<?> message, DateSE startTime) void
'messageStore' 内の永続化されたメッセージを読み取り、再スケジュールするために使用されます。void
setDefaultDelay
(long defaultDelay) デフォルトの遅延をミリ秒単位で設定します。void
setDelayedAdviceChain
(ListSE<Advice> delayedAdviceChain) List<Advice>
を指定して、DelayHandler.ReleaseMessageHandler
プロキシに通知します。void
setDelayedMessageErrorChannel
(MessageChannel delayedMessageErrorChannel) リリースされたメッセージの送信に失敗した場合にErrorMessage
が送信されるメッセージチャネルを設定します。void
setDelayedMessageErrorChannelName
(StringSE delayedMessageErrorChannelName) 解放されたメッセージの送信に失敗した場合にErrorMessage
が送信されるメッセージチャネル名を設定します。void
setDelayExpression
(Expression delayExpression) 遅延期間(ミリ秒単位)または遅延する日付をチェックする必要があるExpression
を指定します。void
setDelayExpressionString
(StringSE delayExpression) 遅延期間(ミリ秒単位)または遅延する日付をチェックする必要があるExpression
を指定します。void
setIgnoreExpressionFailures
(boolean ignoreExpressionFailures) delayExpression
評価によってスローされたExceptions
を無視するかどうかを指定します(ログに記録されるだけです)。void
setMaxAttempts
(int maxAttempts) メッセージのリリースが失敗した場合のリリースの最大試行回数を設定します。void
setMessageGroupId
(StringSE messageGroupId) このハンドラーで遅延メッセージを管理するためのグループ ID を設定します。void
setMessageStore
(MessageGroupStore messageStore) 遅延を待機している間にメッセージを保管するために使用する必要があるMessageGroupStore
を指定します。void
setRetryDelay
(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, getComponentName, getConversionService, getExpression, getIntegrationProperties, getMessageBuilderFactory, getTaskScheduler, isInitialized, setApplicationContext, setBeanFactory, setBeanName, setChannelResolver, setComponentName, 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
MessageGroup
の「キー」として使用される指定された "messageGroupId" を使用して DelayHandler を作成し、遅延メッセージを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
クラスからコピーされた説明:IntegrationObjectSupport
サブクラスはこのメソッドを実装して、コンポーネント型情報を提供できます。- 次で指定:
- インターフェース
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()
での反復に基づいており、「遅延」ロジックのタスクをスケジュールします。この動作は、呼び出しスレッドのオーバーロードを回避することによって決定されます。- 次で指定:
- インターフェース
DelayHandlerManagement
のreschedulePersistedMessages
onApplicationEvent
ContextRefreshedEvent
を処理して、アプリケーションコンテキストの起動後できるだけ遅くreschedulePersistedMessages()
を呼び出します。また、initialized
をチェックして、「親子」コンテキストで公開される可能性のある他のContextRefreshedEvent
を無視します。Spring-MVC アプリケーションで。- 次で指定:
- インターフェース
ApplicationListener<ContextRefreshedEvent>
のonApplicationEvent
- パラメーター:
event
- - アプリケーションコンテキストが完全に初期化された後に発生するContextRefreshedEvent
。- 関連事項: