生活随笔
收集整理的這篇文章主要介紹了
Spring Integration Framework简介
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們非常了解Spring框架和JMS 。 在本文中,我們將介紹稱為Spring Integration 的企業集成框架 。 Spring Integration 是一個開源企業集成框架,可增強Spring單獨完成的功能。 Spring Integration構建在Spring的IoC之上,它抽象了消息源和目標,集成了消息,路由并對其進行操作,同時集成了應用程序環境的各種組件。
Spring Integration用于通信的Message對象 由有效負載 和標頭 數據組成。 有效負載 包含實際數據,而標頭 包含其他元數據,例如id , timestamp等。下圖說明了Spring Integration通信中涉及的不同組件
因此,讓我們創建一個示例Spring Integration應用程序:
使用自定義Java接口作為入站網關 創建一個新的Maven項目。 將依賴項添加到pom.xml 文件中: <properties><spring.version>4.0.0.RELEASE</spring.version><jms.version>1.1-rev-1</jms.version><activemq.version>3.1</activemq.version><spring.integration.version>2.2.5.RELEASE</spring.integration.version><junit.version>4.11</junit.version><spring.test.version>3.2.3.RELEASE</spring.test.version>
</properties><!-- Spring Integration -->
<dependency><groupId>org.springframework.integration</groupId><artifactId>spring-integration-core</artifactId><version>${spring.integration.version}</version>
</dependency>
<dependency><groupId>org.springframework.integration</groupId><artifactId>spring-integration-jms</artifactId><version>${spring.integration.version}</version>
</dependency><!-- Include Spring test -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.test.version}</version><scope>test</scope>
</dependency><!-- Include JUnit -->
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope>
</dependency> 創建學生實體類Student.java , ? 如: package com.jcombat.entity;public class Student {String name;public Student(String name) {this.name = name;}public String getName() {return name;}
} 現在,讓我們在上下文文件中配置spring集成組件(將其命名為Test-context.xml ): <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"xmlns:jms="http://www.springframework.org/schema/jms" xmlns:p="http://www.springframework.org/schema/p"xmlns:int-jme="http://www.springframework.org/schema/integration"xmlns:int="http://www.springframework.org/schema/integration"xmlns:int-jms="http://www.springframework.org/schema/integration/jms"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsdhttp://www.springframework.org/schema/integration/jms http://www.springframework.org/schema/integration/jms/spring-integration-jms.xsdhttp://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.0.xsd"><!-- Enable annotations --><context:annotation-config/><!-- Component scan to find all Spring components --><context:component-scan base-package="org.jcombat.integration"/><bean id="simpleMessageReceiver" class="com.jcombat.integration.DemoMessageReceiver" /><!-- Define a request channel to communicate --><int:channel id="request" /><int:outbound-channel-adapter channel="request" ref="simpleMessageReceiver" method="processMessage" /><int:gateway id="demoGateway" service-interface="com.jcombat.integration.DemoGatewayInterface"default-request-channel="request"></int:gateway></beans> 消息通道 是封裝實際數據并使消息生產者與使用者分離的東西。
網關 基本上是消息傳遞系統的入口/出口點。 因此,如果您有一個消息傳遞服務器,例如ActiveMQ或TIBCO,則DefaultMessageListener充當入站網關,是我們消息傳遞系統的入口點。
當消息到達配置的通道時, Service Activator 用于調用本地服務,其方式是該服務不知道正在從消息傳遞系統中調用該服務。
適配器 從外部消息傳遞系統(JMS,SFTP等)接收消息,并將其“適配”到消息傳遞系統(作為Spring Integration Message <T> )。 入站JMS適配器接收傳入的外部消息,并將其“調整”為Spring Integration Message <T>類型。 反之亦然:它需要一個Spring Integration Message <T>并將其“調整”為外部系統所需的格式。
因此,一旦消息通過入站適配器 進入,它就會通過Channels 從一個組件流向另一個組件。 最終,將消息寫到某個地方可能是適當的。 我們可以使用出站適配器 編寫消息。
現在,讓我們創建在上下文中指定的網關接口,如下所示: package com.jcombat.integration;import com.jcombat.entity.Student;public interface DemoGatewayInterface {public void process(Student student);
} 創建一個接收器類,該類將在被適配器路由后最終從通道接收傳入消息。 package com.jcombat.integration;import org.springframework.integration.Message;import com.jcombat.entity.Student;public class DemoMessageReceiver {public void processMessage(Message<Student> message) {Student student = message.getPayload();System.out.println("Message Received - Student Name - " + student.getName());}
} 就是這個。 最后,我們需要一個客戶端來調用網關接口方法。 讓我們使用Spring Test Framework來做到這一點: package com.jcombat.integration;import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.jcombat.entity.Student;
import com.jcombat.integration.DemoGatewayInterface;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class Test {@Autowiredprivate DemoGatewayInterface request;@org.junit.Testpublic void testIntegration() {Student emp = new Student("Abhishek");request.process(emp);}
} 將您的應用程序添加到服務器并啟動服務器。 導航到我們在上文第7點中創建的Test.java 文件,并將其作為JUnit測試運行。 以下是我們在IDE控制臺中看到的日志: 使用Spring DefaultMessageListener作為入站網關 創建一個新的Maven項目。 確保ActiveMQ服務器已啟動并正在運行。 首先是將條目輸入pom.xml 文件。 因此,這與前面的情況相同。 讓我們編寫上下文文件( jmsContext.xml ),并將Spring Integration組件配置為: <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"xmlns:jms="http://www.springframework.org/schema/jms" xmlns:p="http://www.springframework.org/schema/p"xmlns:int-jme="http://www.springframework.org/schema/integration"xmlns:int="http://www.springframework.org/schema/integration"xmlns:int-jms="http://www.springframework.org/schema/integration/jms"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsdhttp://www.springframework.org/schema/integration/jms http://www.springframework.org/schema/integration/jms/spring-integration-jms.xsdhttp://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.0.xsd"><bean id="connectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory"><property name="brokerURL" value="tcp://localhost:61616" /></bean><bean id="messageListenerContainer"class="org.springframework.jms.listener.DefaultMessageListenerContainer"><property name="connectionFactory" ref="connectionFactory" /><property name="destinationName" value="testQueue" /><property name="maxConcurrentConsumers" value="1" /><property name="concurrentConsumers" value="1" /><property name="receiveTimeout" value="5000" /><property name="recoveryInterval" value="60000" /><property name="autoStartup" value="true" /></bean><!-- Define a channel to communicate out to a JMS Destination --><int:channel id="inbound" /><int:channel id="outbound" /><bean id="simpleMessageListener" class="com.jcombat.listener.SimpleMessageListener" /><int-jms:message-driven-channel-adapterid="jmsIn" container="messageListenerContainer" channel="inbound"acknowledge="auto" /><int:service-activator input-channel="inbound"output-channel="outbound" ref="simpleMessageListener" method="onMessage" /><int-jms:outbound-channel-adapter id="jmsOut"channel="outbound" connection-factory="connectionFactory"destination-name="sampleQueue" /></beans> 讓我們在服務器啟動時加載上下文。 為此,請在web.xml 文件中輸入適當的內容,如下所示: <web-app xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0"><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/jmsContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
</web-app> 創建偵聽器類,該類將最終接收消息,如下所示: package com.jcombat.listener;public class SimpleMessageListener {public String onMessage(String message) {System.out.println(message);return message;}
} 是時候運行我們的應用程序了。 因此,這應該作為: 發送自定義消息到testQueue : 偵聽器被調用,它的onMessage方法被執行,將進入的消息記錄為IDE控制臺: 消息通過出站通道并通過出站適配器傳遞到目標sampleQueue ,如下所示: 下載源代碼 您可以在此處下載源代碼。
翻譯自: https://www.javacodegeeks.com/2015/11/introduction-to-spring-integration-framework.html
總結
以上是生活随笔 為你收集整理的Spring Integration Framework简介 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。