リシーケンサー

リシーケンサーはアグリゲーターに関連していますが、異なる目的を果たします。アグリゲーターはメッセージを結合しますが、リシーケンサーはメッセージを変更せずに通過させます。

機能性

リシーケンサーは、CORRELATION_ID を使用してメッセージをグループに保存するという意味で、アグリゲーターと同様の方法で機能します。違いは、Resequencer がメッセージを処理しないことです。代わりに、SEQUENCE_NUMBER ヘッダー値の順に解放します。

それに関しては、すべてのメッセージを一度に(SEQUENCE_SIZE によるシーケンス全体の後、および他の可能性に従って)解放するか、有効なシーケンスが利用可能になったらすぐに解放するかを選択できます。(この章で後述する「有効なシーケンス」の意味を説明します。)

リシーケンサは、小さなギャップのある比較的短いメッセージシーケンスを再シーケンスすることを目的としています。多数のギャップのあるばらばらのシーケンスが多数ある場合、パフォーマンスの問題が発生する可能性があります。

リシーケンサーの構成

Java DSL でのリシーケンサーの構成については、アグリゲーターとリシーケンサーを参照してください。

リシーケンサを構成するには、XML に適切な要素を含めるだけで済みます。

次の例は、リシーケンサーの構成を示しています。

<int:channel id="inputChannel"/>

<int:channel id="outputChannel"/>

<int:resequencer id="completelyDefinedResequencer"  (1)
  input-channel="inputChannel"  (2)
  output-channel="outputChannel"  (3)
  discard-channel="discardChannel"  (4)
  release-partial-sequences="true"  (5)
  message-store="messageStore"  (6)
  send-partial-result-on-expiry="true"  (7)
  send-timeout="86420000"  (8)
  correlation-strategy="correlationStrategyBean"  (9)
  correlation-strategy-method="correlate"  (10)
  correlation-strategy-expression="headers['something']"  (11)
  release-strategy="releaseStrategyBean"  (12)
  release-strategy-method="release"  (13)
  release-strategy-expression="size() == 10"  (14)
  empty-group-min-timeout="60000"  (15)

  lock-registry="lockRegistry"  (16)

  group-timeout="60000"  (17)
  group-timeout-expression="size() ge 2 ? 100 : -1"  (18)
  scheduler="taskScheduler" />  (19)
  expire-group-upon-timeout="false" />  (20)
1 リシーケンサーの ID はオプションです。
2 リシーケンサーの入力チャンネル。必須。
3 リシーケンサーが並べ替えたメッセージを送信するチャネル。オプション。
4 再シーケンサーがタイムアウトしたメッセージを送信するチャネル(send-partial-result-on-timeout が false に設定されている場合)。オプション。
5 順序付けられたシーケンスが利用可能になったらすぐに送信するか、メッセージグループ全体が到着した後にのみ送信するか。オプション。(デフォルトは false です。)
6 メッセージのグループが完了するまで相関キーに保存するために使用できる MessageGroupStore への参照。オプション。(デフォルトは、揮発性のメモリ内ストアです。)
7 グループの有効期限が切れたときに、順序付きグループを送信するかどうか(メッセージの一部が欠落している場合でも)。オプション。(デフォルトは false です)アグリゲーターでの状態の管理: MessageGroupStore を参照してください。
8 応答 Message を output-channel または discard-channel に送信するときに待機するタイムアウト間隔。デフォルトは -1 で、無期限にブロックします。固定の「容量」を持つ QueueChannel など、出力チャネルに「送信」制限がある場合にのみ適用されます。この場合、MessageDeliveryException がスローされます。send-timeout は、AbstractSubscribableChannel 実装では無視されます。group-timeout(-expression) の場合、スケジュールされた期限切れタスクの MessageDeliveryException により、このタスクが再スケジュールされます。オプション。
9 メッセージ相関(グループ化)アルゴリズムを実装する Bean への参照。Bean は、CorrelationStrategy インターフェースまたは POJO の実装にすることができます。後者の場合、correlation-strategy-method 属性も定義する必要があります。オプション。(デフォルトでは、アグリゲーターは IntegrationMessageHeaderAccessor.CORRELATION_ID ヘッダーを使用します。)
10correlation-strategy によって参照される Bean で定義され、相関決定アルゴリズムを実装するメソッド。オプション、制限あり(correlation-strategy が存在する必要があります)。
11 相関戦略を表す SpEL 式。例: "headers['something']"correlation-strategy または correlation-strategy-expression のいずれかのみが許可されます。
12 リリース戦略を実装する Bean への参照。Bean は、ReleaseStrategy インターフェースまたは POJO の実装にすることができます。後者の場合、release-strategy-method 属性も定義する必要があります。オプション(デフォルトでは、アグリゲーターは IntegrationMessageHeaderAccessor.SEQUENCE_SIZE ヘッダー属性を使用します)。
13release-strategy によって参照される Bean で定義され、完了決定アルゴリズムを実装するメソッド。オプション、制限あり(release-strategy が存在する必要があります)。
14 リリース戦略を表す SpEL 式。式のルートオブジェクトは MessageGroup です。例: "size() == 5"release-strategy または release-strategy-expression のいずれかのみが許可されます。
15MessageGroupStoreReaper が <resequencer>MessageStore 用に構成されている場合にのみ適用されます。デフォルトでは、MessageGroupStoreReaper が部分グループを期限切れにするように構成されている場合、空のグループも削除されます。グループが正常に解放された後、空のグループが存在します。これは、遅れて到着したメッセージの検出と破棄を可能にするためです。部分的なグループを期限切れにするよりも長いスケジュールで空のグループを期限切れにする場合は、このプロパティを設定します。空のグループは、少なくともこのミリ秒数の間変更されない限り、MessageStore から削除されません。空のグループが期限切れになる実際の時間は、リーパーのタイムアウトプロパティの影響も受け、この値にタイムアウトを加えた時間になる可能性があることに注意してください。
16XML を使用したアグリゲーターの構成を参照してください。
17XML を使用したアグリゲーターの構成を参照してください。
18XML を使用したアグリゲーターの構成を参照してください。
19XML を使用したアグリゲーターの構成を参照してください。
20 デフォルトでは、タイムアウトにより(または MessageGroupStoreReaper により)グループが完了すると、空のグループのメタデータが保持されます。到着したメッセージはすぐに破棄されます。これを true に設定して、グループを完全に削除します。その後、遅れて到着したメッセージは新しいグループを開始し、グループが再びタイムアウトになるまで破棄されません。タイムアウトの原因となったシーケンス範囲の「ホール」のため、新しいグループは通常解放されません。空のグループは、empty-group-min-timeout 属性と一緒に MessageGroupStoreReaper を使用することにより、後で期限切れにする(完全に削除する)ことができます。バージョン 5.0 以降、空のグループも empty-group-min-timeout の経過後に削除されるようにスケジュールされています。デフォルトは "false" です。

詳細については、アグリゲーターの期限切れグループも参照してください。

再シーケンサーの Java クラスに実装されるカスタム動作はないため、アノテーションのサポートはありません。