クラス DelayHandler

実装されたすべてのインターフェース:
EventListenerSEorg.reactivestreams.Subscriber<Message<?>>AwareBeanClassLoaderAwareBeanFactoryAwareBeanNameAwareDisposableBeanInitializingBeanApplicationContextAwareApplicationListener<ContextRefreshedEvent>OrderedExpressionCapableOrderableMessageProducerDelayHandlerManagementHeaderPropagationAwareIntegrationPatternNamedComponentIntegrationManagementTrackableComponentMessageHandlerreactor.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
  • フィールドの詳細

  • コンストラクターの詳細

    • DelayHandler

      public DelayHandler()
      デフォルトのオプションを使用してインスタンスを構築します。messageGroupId は setter 経由で提供する必要があります。
      導入:
      6.2
    • DelayHandler

      public DelayHandler(StringSE messageGroupId)
      MessageGroup の「キー」として使用される指定された "messageGroupId" を使用して DelayHandler を作成し、遅延メッセージを MessageGroupStore に格納します。遅延後のメッセージの送信は、ApplicationContext のデフォルト ThreadPoolTaskScheduler に登録されて処理されます。
      パラメーター:
      messageGroupId - メッセージグループ識別子。
      関連事項:
    • DelayHandler

      public DelayHandler(StringSE messageGroupId, TaskScheduler taskScheduler)
      指定されたデフォルトの遅延で DelayHandler を作成します。遅延後のメッセージの送信は、提供された TaskScheduler によって処理されます。
      パラメーター:
      messageGroupId - メッセージグループ識別子。
      taskScheduler - タスクスケジューラ。
  • メソッドの詳細

    • setMessageGroupId

      public void setMessageGroupId(StringSE messageGroupId)
      このハンドラーで遅延メッセージを管理するためのグループ ID を設定します。必須。
      パラメーター:
      messageGroupId - 遅延メッセージのグループ ID。
      導入:
      6.2
    • setDefaultDelay

      public void setDefaultDelay(long defaultDelay)
      デフォルトの遅延をミリ秒単位で設定します。delayExpression プロパティが指定されていない場合、デフォルトの遅延がすべてのメッセージに適用されます。評価結果が delayExpression のメッセージにのみ遅延を適用する必要がある場合は、この値を 0 に設定します。
      パラメーター:
      defaultDelay - ミリ秒単位のデフォルトの遅延。
    • setDelayExpression

      public void setDelayExpression(Expression delayExpression)
      遅延期間(ミリ秒単位)または遅延する日付をチェックする必要がある Expression を指定します。このプロパティが設定されている場合、式の評価の結果(null でない場合)は、このハンドラーのデフォルトの遅延よりも優先されます。
      パラメーター:
      delayExpression - 遅延式。
    • setDelayExpressionString

      public void setDelayExpressionString(StringSE delayExpression)
      遅延期間(ミリ秒単位)または遅延する日付をチェックする必要がある 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

      public void setMessageStore(MessageGroupStore messageStore)
      遅延を待機している間にメッセージを保管するために使用する必要がある MessageGroupStore を指定します。
      パラメーター:
      messageStore - メッセージストア。
    • setDelayedAdviceChain

      public void setDelayedAdviceChain(ListSE<Advice> delayedAdviceChain)
      List<Advice> を指定して、DelayHandler.ReleaseMessageHandler プロキシに通知します。通常、トランザクションメッセージストアから取得した遅延メッセージにトランザクションを追加するために使用されます。
      パラメーター:
      delayedAdviceChain - アドバイスチェーン。
      関連事項:
      • createReleaseMessageTask()
    • setDelayedMessageErrorChannel

      public void setDelayedMessageErrorChannel(MessageChannel delayedMessageErrorChannel)
      リリースされたメッセージの送信に失敗した場合に ErrorMessage が送信されるメッセージチャネルを設定します。エラーフローが正常に戻った場合、リリースは完了です。エラーフローが例外をスローした場合、リリースは再試行されます。リリースタスクに関するトランザクションアドバイスがある場合、エラーフローはトランザクション内で呼び出されます。
      パラメーター:
      delayedMessageErrorChannel - チャンネル。
      導入:
      5.0.8
      関連事項:
    • setDelayedMessageErrorChannelName

      public void setDelayedMessageErrorChannelName(StringSE delayedMessageErrorChannelName)
      解放されたメッセージの送信に失敗した場合に 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

      public StringSE getComponentType()
      クラスからコピーされた説明: IntegrationObjectSupport
      サブクラスはこのメソッドを実装して、コンポーネント型情報を提供できます。
      次で指定:
      インターフェース NamedComponentgetComponentType 
      オーバーライド:
      クラス MessageHandlerSupportgetComponentType 
    • getIntegrationPatternType

      public IntegrationPatternType getIntegrationPatternType()
      インターフェースからコピーされた説明: IntegrationPattern
      このコンポーネントが実装するパターン型を返します。
      次で指定:
      インターフェース IntegrationPatterngetIntegrationPatternType 
      オーバーライド:
      クラス AbstractReplyProducingMessageHandlergetIntegrationPatternType 
      戻り値:
      このコンポーネントが実装する IntegrationPatternType
    • doInit

      protected void doInit()
      オーバーライド:
      クラス AbstractReplyProducingMessageHandlerdoInit 
    • shouldCopyRequestHeaders

      protected boolean shouldCopyRequestHeaders()
      クラスからコピーされた説明: AbstractMessageProducingHandler
      サブクラスはこれをオーバーライドできます。デフォルトでは true。
      オーバーライド:
      クラス AbstractMessageProducingHandlershouldCopyRequestHeaders 
      戻り値:
      リクエストヘッダーをコピーする必要がある場合は true。
    • handleRequestMessage

      protected ObjectSE handleRequestMessage(Message<?> requestMessage)
      'requestMessage' が以前に遅延されていないかどうかを確認します(releaseMessageAfterDelay(org.springframework.messaging.Message<?>, long) および DelayHandler.DelayedMessageWrapper)。'requestMessage' (determineDelayForMessage(org.springframework.messaging.Message<?>))の 'delay' を決定し、delay > 0 が 'delay' の後に 'releaseMessage' タスクをスケジュールするかどうかを決定するよりも。
      次で指定:
      クラス AbstractReplyProducingMessageHandlerhandleRequestMessage 
      パラメーター:
      requestMessage - - 遅延する可能性のあるメッセージ。
      戻り値:
      -'requestMessage ' が遅延している場合は null、それ以外の場合 -'requestMessage' からの 'payload'。
      関連事項:
      • releaseMessage(org.springframework.messaging.Message<?>)
    • rescheduleAt

      protected void rescheduleAt(Message<?> message, DateSE startTime)
    • getDelayedMessageCount

      public int getDelayedMessageCount()
      次で指定:
      インターフェース DelayHandlerManagementgetDelayedMessageCount 
    • reschedulePersistedMessages

      public void reschedulePersistedMessages()
      'messageStore' 内の永続化されたメッセージを読み取り、再スケジュールするために使用されます。アプリケーションの再起動時。ロジックは messageGroup.getMessages() での反復に基づいており、「遅延」ロジックのタスクをスケジュールします。この動作は、呼び出しスレッドのオーバーロードを回避することによって決定されます。
      次で指定:
      インターフェース DelayHandlerManagementreschedulePersistedMessages 
    • onApplicationEvent

      public void onApplicationEvent(ContextRefreshedEvent event)
      ContextRefreshedEvent を処理して、アプリケーションコンテキストの起動後できるだけ遅く reschedulePersistedMessages() を呼び出します。また、initialized をチェックして、「親子」コンテキストで公開される可能性のある他の ContextRefreshedEvent を無視します。Spring-MVC アプリケーションで。
      次で指定:
      インターフェース ApplicationListener<ContextRefreshedEvent>onApplicationEvent 
      パラメーター:
      event - - アプリケーションコンテキストが完全に初期化された後に発生する ContextRefreshedEvent
      関連事項: