1

私自身の実験に基づいて (これはどこにも文書化されていません)、同じ相関 ID とシーケンス番号を持つ 2 つのメッセージの場合、アグリゲーターは最初のメッセージのみを取得し、他のメッセージを破棄/無視します。

代わりに最後に受信したメッセージをアグリゲータに使用させる方法はありますか?

集約により、ペイロードが 1 つの文字列にマージされます。

単純なシナリオ: 相関 ID が同じでシーケンス サイズが 2 の 3 つのメッセージを受信時間順に並べたもの

  • シーケンス番号: 1; ペイロード: abc
  • シーケンス番号: 1; ペイロード: デフ
  • シーケンス番号: 2; ペイロード: ghi

現在の出力: abcghi

期待される出力: defghi

このシナリオは、最初のメッセージ用のシーケンス番号 2 が欠落している場合に発生します。また、相関 ID (デコードされたペイロードから取得) は非常に限られているため、複数回使用されます。

オリジナルメッセージ

生のメッセージは次の形式で送信されます。

  • 「配列サイズ」、「配列番号」、「ID」、「テキスト」
  • ID の範囲は 0 ~ 9 です
  • メッセージの例: 2,1,8,abc

生メッセージのペイロードの例:

  • 2,1,8,abc
  • 2,1,8,定義
  • 2,2,8,ギ

アグリゲーターは基本的にテキストを結合します

4

1 に答える 1

1

カスタム リリース戦略を使用する必要があります (デフォルトと同じロジックを持つことはできますSequenceSizeReleaseStrategyが、そのクラスにすることはできません)。デフォルトの戦略では、重複シーケンスはスキップされます。

ただし、目的の動作を実行するには、カスタム メッセージ グループ ストアも必要です。それ以外の場合、出力は になりますabcdefghi

ただし、その場合、破棄されたメッセージは破棄チャネルに送信されません。

通常、相関 ID を再利用することはお勧めできません。必要に応じて、group-timeoutまたは reaper を使用して、相関 ID が再利用される前に部分グループを破棄します。

ところで、デフォルトを使用してヘッダーを操作するよりも、カスタムCorrelationStrategyを使用する方が簡単な場合があります。ReleaseStrategy

于 2015-05-24T15:05:16.777 に答える