閉じる

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 プロジェクト別に用意されています。プロジェクトの機能を使用する方法と、それを使用して達成できることを詳細に説明しています。
5.2.3 CURRENT GA リファレンスドキュメント APIドキュメント
5.3.0 M2 PRE リファレンスドキュメント APIドキュメント
5.3.0 SNAPSHOT リファレンスドキュメント APIドキュメント
5.2.4 SNAPSHOT リファレンスドキュメント APIドキュメント
4.3.22 SNAPSHOT リファレンスドキュメント (英語) APIドキュメント (英語)
4.3.21 GA リファレンスドキュメント (英語) APIドキュメント (英語)

ガイド

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

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