Spring 集成6.3.5

扩展 Spring 编程模型以支持众所周知的 企业集成模式。Spring 集成支持基于 Spring 的应用程序中的轻量级消息传递,并通过声明式适配器支持与外部系统的集成。这些适配器在 Spring 对远程处理、消息传递和调度的支持之上提供了更高级别的抽象。Spring 集成的主要目标是在构建企业集成解决方案时提供一个简单的模型,同时保持关注点分离,这对于生成可维护、可测试的代码至关重要。

简介

使用 Spring 框架鼓励开发人员使用接口进行编码,并使用依赖注入 (DI) 为普通旧 Java 对象 (POJO) 提供执行其任务所需的依赖项。Spring 集成将此概念更进一步,其中 POJO 使用消息传递范式连接在一起,并且各个组件可能不知道应用程序中的其他组件。此类应用程序是通过组装细粒度的可重用组件来形成更高级别的功能而构建的。通过精心设计,这些流程可以模块化,并在更高级别重用。

除了将细粒度的组件连接在一起之外,Spring Integration 还提供了各种通道适配器和网关来与外部系统通信。通道适配器用于单向集成(发送或接收);网关用于请求/回复场景(入站或出站)。有关适配器和网关的完整列表,请参阅参考文档。

Spring Cloud Stream 项目构建在 Spring Integration 之上,其中 Spring Integration 用作消息驱动微服务的引擎。

特性

  • 大多数企业集成模式的实现

  • 端点

  • 通道(点对点和发布/订阅)

  • 聚合器

  • 过滤器

  • 转换器

  • 控制总线

  • 与外部系统的集成

  • ReST/HTTP

  • FTP/SFTP

  • STOMP

  • Web 服务(SOAP 和 RESTful)

  • TCP/UDP

  • JMS

  • RabbitMQ

  • 电子邮件

  • 该框架具有广泛的 JMX 支持

  • 将框架组件作为 MBean 公开

  • 适配器用于从 MBean 获取属性、调用操作、发送/接收通知

示例

在以下“快速入门”应用程序中,您可以看到相同的网关接口用于调用两个完全不同的服务实现。要构建和运行此程序,您需要如上所述的 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://w3schools.org.cn/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://w3schools.org.cn/xml/FahrenheitToCelsius"/>
	</int-ws:header-enricher>
	<int-ws:outbound-gateway
		uri="https://w3schools.org.cn/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://w3schools.org.cn/xml/\">"
            +     "<Fahrenheit>" + payload + "</Fahrenheit>"
            + "</FahrenheitToCelsius>")
        .enrichHeaders(h -> h
            .header(WebServiceHeaders.SOAP_ACTION,
                "https://w3schools.org.cn/xml/FahrenheitToCelsius"))
        .handle(new SimpleWebServiceOutboundGateway(
            "https://w3schools.org.cn/xml/tempconvert.asmx"))
        .transform(Transformers.xpath("/*[local-name()=\"FahrenheitToCelsiusResponse\"]"
            + "/*[local-name()=\"FahrenheitToCelsiusResult\"]"));
  }

}
Spring Initializr

快速入门您的项目

取得先机

VMware 提供培训和认证,以加快您的进度。

了解更多

获得支持

Tanzu Spring 在一个简单的订阅中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举行的活动

查看 Spring 社区中所有即将举行的活动。

查看全部