統合フローの構成
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
定義に自動接続するだけで十分です。