のスプリッタ、サービスアクティベータ同時ユニット私は春の統合 - JPAインバウンドチャネルアダプタ、作業
- ロードN倍の資産がチャネルに、JPAで、ステータスXを持つ非常に単純Spring統合パイプラインを設定している
- スプリットついにY
に、このPIPの同期的な性質をエンティティのステータスを更新し、サービスアクティベータを使用して新しいチャネルに各JPAエンティティ
nullChannel
これはうまくいきますが、
サービスアクティベータはいくつかのことを行いますが、そのうちの1つは外部REST APIを呼び出してからアセットのステータスを更新するため、#1から除外されます。
ここで問題となるのは、サービスアクティベータが1つのメッセージを処理するのに約1秒かかることです(この時間のほとんどはREST APIの呼び出しです)。そのため、250個のJPAエンティティのキューには250秒プロセス。
REST APIを並行して、たとえば5回呼び出しても1秒かかるとします。我々は多分パイプライン全体が同期「作業単位」として実行できるようになりますAggregator
とTask Executor
を、追加して、当社のパイプラインに作るが、許可することができ、簡単な変更がある場合
だから、私は疑問に思ってService Activator
が同時に処理されます。
これはまあ、aggregator
はとにかく本当にすべての返信を待っているために行くための正しい方法ですが、一緒にExecutorChannel
splitter
後のあなたの無料ポーラーの手との統合の設定
<channel id="newAssetChannel" />
<channel id="splitAssetChannel" />
<int-jpa:inbound-channel-adapter
id="newAssetChannelAdapter"
channel="newAssetChannel"
entity-manager-factory="entityManagerFactory"
entity-class="com.foo.domain.Asset"
jpa-query="select a from Asset a where (a.status = 'NEW' or a.status = 'UPDATED') and a.health = 'OK' ORDER BY a.priority DESC, a.updatedDate ASC"
max-results="250">
<poller fixed-rate="5000" max-messages-per-poll="1" />
</int-jpa:inbound-channel-adapter>
<splitter expression="payload"
input-channel="newAssetChannel"
output-channel="splitNewAssetChannel" />
<service-activator
id="newAssetServiceActivator"
input-channel="splitNewAssetChannel"
output-channel="nullChannel"
ref="assetProcessor"
method="processNew" />
これは私を適切な道に導き、間違いなくSpring Integrationの一般的な理解を深めてくれます。完全にアップデートされた設定はここにあります(私が改善できる何かをしたら、要点は分かります) - gist.github.com/shainegordon/66da307b2e89f69e549b675ffbfd363 e – kabal