0

私は、3つのアプリケーション(ソース、プロセッサ、シンク)を持つストリームを持っているとします。Spring Cloud Dataflow - メッセージの保持順序

ソースから受け取ったメッセージの順序を保持する必要があります。メッセージA、B、C、Dを受け取ったら、A、B、C、Dとしてシンクに送る必要があります。 (私はそれらをB、A、C、Dとして送ることはできません)。

各アプリケーションのインスタンスが1つだけあれば、すべてが順番に実行され、その注文は保持されます。

各アプリケーションのインスタンスが10個ある場合、メッセージA、B、C、Dは異なる時点で同時に処理される可能性があります。これらのメッセージがどのような順序で巻き込まれるのかはわかりません。

複数のインスタンスを使用しているときにメッセージの順序を保持する方法はありますか?

答えて

2

いいえ。 (バインダー内の並行性によって、または複数のインスタンスをデプロイすることによって)スケールアウトすると、順序が失われます。これは、スプリングクラウドストリームだけでなく、マルチスレッドアプリケーションにも当てはまります。

各インスタンスがデータのパーティションを取得するようにパーティション化を使用できますが、順序は各パーティション内でのみ保持されます。

メッセージにシーケンス情報がある場合は、Spring Integration Resequencerを使用してカスタムモジュールを追加して、メッセージを同じシーケンスに再構成することができます。ただし、単一のシンクインスタンスの前にリシーケンサーのインスタンスが1つ必要です。

関連する問題