Spring Integration 5.2.4

Extends the Spring programming model to support the well-known Enterprise Integration Patterns. Spring Integration enables lightweight messaging within Spring-based applications and supports integration with external systems via declarative adapters. Those adapters provide a higher-level of abstraction over Spring’s support for remoting, messaging, and scheduling. Spring Integration’s primary goal is to provide a simple model for building enterprise integration solutions while maintaining the separation of concerns that is essential for producing maintainable, testable code.
Introduction

Using the Spring Framework encourages developers to code using interfaces and use dependency injection (DI) to provide a Plain Old Java Object (POJO) with the dependencies it needs to perform its tasks. Spring Integration takes this concept one step further, where POJOs are wired together using a messaging paradigm and individual components may not be aware of other components in the application. Such an application is built by assembling fine-grained reusable components to form a higher level of functionality. WIth careful design, these flows can be modularized and also reused at an even higher level.

In addition to wiring together fine-grained components, Spring Integration provides a wide selection of channel adapters and gateways to communicate with external systems. Channel Adapters are used for one-way integration (send or receive); gateways are used for request/reply scenarios (inbound or outbound). For a full list of adapters and gateways, refer to the reference documentation.

The Spring Cloud Stream project builds on Spring Integration, where Spring Integration is used as an engine for message-driven microservices.
Features

Implementation of most of the Enterprise Integration Patterns

Endpoint

Channel (Point-to-point and Publish/Subscribe)

Aggregator

Filter

Transformer

Control Bus

…

Integration with External Systems

ReST/HTTP

FTP/SFTP

Twitter

WebServices (SOAP and ReST)

TCP/UDP

JMS

RabbitMQ

Email

…

The framework has extensive JMX support

Exposing framework components as MBeans

Adapters to obtain attributes from MBeans, invoke operations, send/receive notifications

Examples

In the following “quick start” application you can see that the same gateway interface is used to invoke two completely different service implementations. To build and run this program you will need the spring-integration-ws and spring-integration-xml modules as described above.

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);

}

<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"/>

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

<int:chain id=“wsChain” input-channel=“viaWebService”>
<int:transformer
expression="’<FahrenheitToCelsius xmlns=“https://www.w3schools.com/xml/”><Fahrenheit>XXX</Fahrenheit></FahrenheitToCelsius>’.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>

And here is the same application (web service part) using the Java DSL (and Spring Boot). You will need the spring-boot-starter-integration dependency or spring-integration-java-dsl directly if you don’t use Spring Boot. If you use Spring Integration starting version 5.0, you don’t need any additional dependencies - the Java DSL is included to the core project:

@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/”>”
+ “” + payload + “”
+ “”)
.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 Config

Spring Boot Autoconfiguration for Spring Integration
Spring Initializr
Quickstart Your Project
Bootstrap your application with Spring Initializr.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值