2016-10-06 4 views
2

私は春の統合を使用しており、私は10kでメッセージのグループをパックする必要があります。後で10kがもっと大きくなり、永続的なストレージが私の選択ではないので、リストに格納したくない。私は、いくつかのスレッドが1つのスレッドにメッセージを送信して、それらを数え、10k行を含むファイルにディスクに書き込むことを望みます。カウンタが10kに達したら、私はゼロへの新しいファイルセットカウンタを作成します。それは直接チャネルでうまくいくでしょうが、いくつかのスレッド(私はリストなしの集約メッセージ

<int:dispatcher task-executor="executor" /> 

)を使ってメッセージをシングルスレッドに送信する方法を教えてください。ありがとう

答えて

0

QueueChannelでタスクにアクセスできます。どのスレッドもメッセージを同時に送信できます。反対側では、あなたが要求した通りPollingConsumerfixed-delayポーラー - シングルスレッドに設定してください。つまり、fixed-delayのポーラーと、DirectChannelの下流のすべてのポーラーは、1つのスレッドでのみ実行されます。したがって、カウントとロールオーバのロジックに到達することができます。

これは設定が単純であるため、あなたには表示されません。別のサービスが同じQueueChannelにメッセージを送信します。 fixed-delayポーラーは、シングルスレッド読み取りを保証します。

+0

回答ありがとうございますが、すべてのメッセージの固定遅延遅延受信ではありません。つまり、固定遅延= 10に設定しても、すべてのメッセージが遅延10ミリ秒でポーリングされますか?私は多くのデータを持っており、私はできるだけ早くそれを処理する必要があります。私はAtomicIntegerCounterについて不思議だった。これはマルチスレッド環境で動作するはずです。なぜなら、Beanはアプリケーションコンテキストごとにシングルレットであるからです。 –

+0

ああ、私は遅延= 0に設定できることに気づいた。だから私は、私が必要なものだと信じています。 –