我们非常了解Spring框架和JMS 。 在本文中,我们将介绍称为Spring Integration的企业集成框架 。 Spring Integration是一个开源企业集成框架,可增强Spring单独完成的功能。 Spring Integration构建在Spring的IoC之上,它抽象了消息源和目标,集成了消息,路由并对其进行操作,同时集成了应用程序环境的各种组件。
Spring Integration用于通信的Message对象由有效负载和标头数据组成。 有效负载包含实际数据,而标头包含其他元数据,例如id , timestamp等。下图说明了Spring Integration通信中涉及的不同组件
因此,让我们创建一个示例Spring Integration应用程序:
使用自定义Java接口作为入站网关
- 创建一个新的Maven项目。
- 将依赖项添加到pom.xml文件中:
4.0.0.RELEASE 1.1-rev-1 3.1 2.2.5.RELEASE 4.11 3.2.3.RELEASE org.springframework.integration spring-integration-core ${spring.integration.version} org.springframework.integration spring-integration-jms ${spring.integration.version} org.springframework spring-test ${spring.test.version} test junit junit ${junit.version} test - 创建学生实体类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 ):
消息通道是封装实际数据并使消息生产者与使用者分离的东西。
网关基本上是消息传递系统的入口/出口点。 因此,如果您有一个消息传递服务器,例如ActiveMQ或TIBCO,则DefaultMessageListener充当入站网关,是我们消息传递系统的入口点。
当消息到达配置的通道时, Service Activator用于调用本地服务,其方式是该服务不知道正在从消息传递系统中调用该服务。
适配器从外部消息传递系统(JMS,SFTP等)接收消息,并将其“适配”到消息传递系统(作为Spring Integration Message
)。 入站JMS适配器接收传入的外部消息,并将其“调整”为Spring Integration Message 类型。 反之亦然:它需要一个Spring Integration Message 并将其“调整”为外部系统所需的格式。 因此,一旦消息通过入站适配器进入,它就会通过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
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组件配置为:
- 让我们在服务器启动时加载上下文。 为此,请在web.xml文件中输入适当的内容,如下所示:
contextConfigLocation /WEB-INF/jmsContext.xml org.springframework.web.context.ContextLoaderListener - 创建侦听器类,该类将最终接收消息,如下所示:
package com.jcombat.listener;public class SimpleMessageListener {public String onMessage(String message) {System.out.println(message);return message;}
} - 是时候运行我们的应用程序了。 因此,这应该作为:
- 发送自定义消息到testQueue :
- 侦听器被调用,它的onMessage方法被执行,将进入的消息记录为IDE控制台:
- 消息通过出站通道并通过出站适配器传递到目标sampleQueue ,如下所示:
- 发送自定义消息到testQueue :
下载源代码
您可以在此处下载源代码。
翻译自: https://www.javacodegeeks.com/2015/11/introduction-to-spring-integration-framework.html