閉じる

Spring Integration

5.3.1

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

導入

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

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

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

機能

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

  • エンドポイント

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

  • アグリゲーター

  • フィルター

  • トランスフォーマー

  • 制御バス

  • 外部システムとの統合

  • ReST/HTTP

  • FTP/SFTP

  • Twitter

  • Web サービス (SOAP および ReST)

  • TCP/UDP

  • JMS

  • RabbitMQ

  • メール

  • フレームワークは広範な JMX サポートを備えています

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

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

サンプル

次の「クイックスタート」アプリケーションでは、完全に異なる 2 つのサービス実装を呼び出すために同じゲートウェイインターフェースが使用されていることがわかります。このプログラムをビルドして実行するには、上記のように spring-integration-ws および spring-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 (GitHub) (および Spring Boot)を使用した同じアプリケーション(Web サービスパーツ)です。Spring Boot を使用しない場合は、spring-boot-starter-integration 依存関係または spring-integration-java-dsl を直接必要とします。Spring Integration 開始バージョン 5.0 を使用する場合、追加の依存関係は必要ありません -Java DSL はコアプロジェクトに含まれています:

@Configuration
@SpringBootApplication
@IntegrationComponentScan
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 Initializr

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

Spring Initializr (英語) を使用してアプリケーションをブートストラップします。

ガイド

15-30 分で完成するように設計されたガイドは、Spring を使用した開発タスク用のスターターアプリ構築するための、迅速で実践的な手順を提供します。

Unofficial Translation by spring.pleiades.io. See the original content.