最新の安定バージョンについては、Spring Integration 7.1.0 を使用してください! |
統合フローの構成
Spring Integration の第一級オブジェクトとしての MessageChannel 抽象化では、統合フローの構成が常に想定されていました。フロー内の任意のエンドポイントの入力チャネルを使用して、このチャネルを出力として持つエンドポイントからだけでなく、他の任意のエンドポイントからメッセージを送信できます。さらに、@MessagingGateway 契約、Content Enricher コンポーネント、<chain> などの複合エンドポイント、IntegrationFlow Bean(IntegrationFlowAdapter など)を使用すると、ビジネスロジックをより短く再利用可能なパーツに分散するのに十分簡単です。最終的な構成に必要なのは、送信または受信する MessageChannel に関する知識だけです。
バージョン 5.5.4 以降、MessageChannel からさらに抽象化し、実装の詳細をエンドユーザーから隠すために、IntegrationFlow は from(IntegrationFlow) ファクトリメソッドを導入して、既存のフローの出力から現在の IntegrationFlow を開始できるようにします。
@Bean
IntegrationFlow templateSourceFlow() {
return IntegrationFlow.fromSupplier(() -> "test data")
.channel("sourceChannel")
.get();
}
@Bean
IntegrationFlow compositionMainFlow(IntegrationFlow templateSourceFlow) {
return IntegrationFlow.from(templateSourceFlow)
.<String, String>transform(String::toUpperCase)
.channel(c -> c.queue("compositionMainFlowResult"))
.get();
} 一方、IntegrationFlowDefinition には、他のフローの入力チャネルでカレントフローを継続するための to(IntegrationFlow) ターミナルオペレーターが追加されています。
@Bean
IntegrationFlow mainFlow(IntegrationFlow otherFlow) {
return f -> f
.<String, String>transform(String::toUpperCase)
.to(otherFlow);
}
@Bean
IntegrationFlow otherFlow() {
return f -> f
.<String, String>transform(p -> p + " from other flow")
.channel(c -> c.queue("otherFlowResultChannel"));
} フローの途中の構成は、既存の gateway(IntegrationFlow) EIP 方式で簡単に実現できます。このようにして、よりシンプルで再利用可能な論理ブロックからフローを構成することで、あらゆる複雑なフローを構築できます。例: IntegrationFlow Bean のライブラリを依存関係として追加できます。構成クラスを最終プロジェクトにインポートし、IntegrationFlow 定義に自動接続するだけで十分です。