Spring Integration 6.3.4

Spring プログラミングモデルを拡張して、よく知られているエンタープライズ統合パターン (英語) をサポートします。Spring Integration は、Spring ベースのアプリケーション内で軽量メッセージングを可能にし、宣言型アダプターを介した外部システムとの統合をサポートします。これらのアダプターは、Spring のリモート処理、メッセージング、スケジューリングのサポートよりも高度な抽象化を提供します。Spring Integration の主なゴールは、保守可能なテスト可能なコードを作成するために不可欠な関心事の分離を維持しながら、エンタープライズ統合ソリューションを構築するためのシンプルなモデルを提供することです。

導入

Spring Framework を使用すると、開発者はインターフェースを使用してコーディングし、依存性注入 (DI) を使用して、タスクの実行に必要な依存関係を Plain Old Java Object (POJO) に提供することが推奨されます。Spring Integration はこの概念をさらに一歩進めたもので、POJO はメッセージングパラダイムを使用して相互に接続され、個々のコンポーネントはアプリケーション内の他のコンポーネントを認識しなくなります。このようなアプリケーションは、きめ細かい再利用可能なコンポーネントを組み立てて、より高いレベルの機能を形成することによって構築されます。慎重に設計すれば、これらのフローをモジュール化して、さらに高いレベルで再利用することもできます。

Spring Integration は、きめの細かいコンポーネントを接続することに加えて、外部システムと通信するための幅広いチャネルアダプターとゲートウェイを提供します。チャネルアダプターは、一方向の統合(送信または受信)に使用されます。ゲートウェイは、リクエスト / 応答シナリオ(受信または送信)に使用されます。アダプターとゲートウェイの完全なリストについては、リファレンスドキュメントを参照してください。

Spring Cloud Stream プロジェクトは Spring Integration 上に構築され、Spring Integration はメッセージ駆動型マイクロサービスのエンジンとして使用されます。

機能

  • エンタープライズ統合パターンのほとんどの実装

  • エンドポイント

  • チャンネル (ポイントツーポイントおよびパブリッシュ / サブスクライブ)

  • アグリゲーター

  • フィルター

  • Transformer

  • 制御バス

  • 外部システムとの統合

  • ReST/HTTP

  • FTP/SFTP

  • STOMP

  • Web サービス (SOAP と RESTful)

  • TCP/UDP

  • JMS

  • RabbitMQ

  • メール

  • 広範な JMX サポートを備えたフレームワーク

  • フレームワークコンポーネントを MBean として公開

  • MBean から属性を取得し、操作を呼び出し、通知を送信 / 受信するアダプター

サンプル

次の「クイックスタート」アプリケーションでは、同じゲートウェイインターフェースが 2 つの完全に異なるサービス実装を呼び出すために使用されていることがわかります。構築し、上記のように、spring-integration-wsspring-integration-xml モジュールが必要になります。このプログラムを実行します。

public class Main {

	public static void main(String... args) throws Exception {
		ApplicationContext ctx =
			new ClassPathXmlApplicationContext("context.xml");
		// Simple Service
		TempConverter converter =
			ctx.getBean("simpleGateway", TempConverter.class);
		System.out.println(converter.fahrenheitToCelcius(68.0f));
		// Web Service
		converter  = ctx.getBean("wsGateway", TempConverter.class);
		System.out.println(converter.fahrenheitToCelcius(68.0f));
	}
}
public interface TempConverter {

	float fahrenheitToCelcius(float fahren);

}
<!-- Simple Service -->

<int:gateway id="simpleGateway"
	service-interface="foo.TempConverter"
	default-request-channel="simpleExpression" />

<int:service-activator id="expressionConverter"
	input-channel="simpleExpression"
	expression="(payload - 32) / 9 * 5"/>

<!-- Web Service -->

<int:gateway id="wsGateway" service-interface="foo.TempConverter"
	default-request-channel="viaWebService" />

<int:chain id="wsChain" input-channel="viaWebService">
	<int:transformer
	   expression="'&lt;FahrenheitToCelsius xmlns=&quot;https://www.w3schools.com/xml/&quot;&gt;&lt;Fahrenheit&gt;XXX&lt;/Fahrenheit&gt;&lt;/FahrenheitToCelsius&gt;'.replace('XXX', payload.toString())" />
	<int-ws:header-enricher>
		<int-ws:soap-action value="https://www.w3schools.com/xml/FahrenheitToCelsius"/>
	</int-ws:header-enricher>
	<int-ws:outbound-gateway
		uri="https://www.w3schools.com/xml/tempconvert.asmx"/>
	<int-xml:xpath-transformer
		xpath-expression="/*[local-name()='FahrenheitToCelsiusResponse']/*[local-name()='FahrenheitToCelsiusResult']"/>
</int:chain>

そして、これが Java DSL(および Spring Boot)を使用した同じアプリケーション(Web サービス部分)です。Spring Boot を使用しない場合は、spring-boot-starter-integration 依存関係または spring-integration-core が直接必要になります。

@SpringBootApplication
public class Application {

  public static void main(String[] args) {
    ConfigurableApplicationContext ctx = SpringApplication.run(Application.class, args);
    TempConverter converter = ctx.getBean(TempConverter.class);
    System.out.println(converter.fahrenheitToCelcius(68.0f));
    ctx.close();
  }

  @MessagingGateway
  public interface TempConverter {

    @Gateway(requestChannel = "convert.input")
    float fahrenheitToCelcius(float fahren);

  }

  @Bean
  public IntegrationFlow convert() {
      return f -> f
        .transform(payload ->
              "<FahrenheitToCelsius xmlns=\"https://www.w3schools.com/xml/\">"
            +     "<Fahrenheit>" + payload + "</Fahrenheit>"
            + "</FahrenheitToCelsius>")
        .enrichHeaders(h -> h
            .header(WebServiceHeaders.SOAP_ACTION,
                "https://www.w3schools.com/xml/FahrenheitToCelsius"))
        .handle(new SimpleWebServiceOutboundGateway(
            "https://www.w3schools.com/xml/tempconvert.asmx"))
        .transform(Transformers.xpath("/*[local-name()=\"FahrenheitToCelsiusResponse\"]"
            + "/*[local-name()=\"FahrenheitToCelsiusResult\"]"));
  }

}

Spring Boot 構成

Spring Integration の Spring Boot 自動構成

また、Spring 機能カタログ [GitHub] (英語) も参照してください。ここでは、ほとんどのアーティファクトが基本的に特定の Spring Integration チャネルアダプターの自動構成です。

Spring Initializr

プロジェクトのクイックスタート

サポートの取得

Tanzu Spring は、1 つのシンプルなサブスクリプションで OpenJDK ™、Spring、Apache Tomcat ® のサポートとバイナリを提供します。

さらに学習したい方に (英語)

今後のイベント

Spring コミュニティで今後開催されるすべてのイベントをチェックしてください。

すべて表示 (英語)