我们非常了解Spring框架和JMS 。 在本文中,我们将介绍称为Spring Integration企业集成框架Spring Integration是一个开源企业集成框架,可增强Spring单独完成的功能。 Spring Integration构建在Spring的IoC之上,它抽象了消息源和目标,集成了消息,路由并对其进行操作,同时集成了应用程序环境的各种组件。

Spring Integration用于通信的Message对象有效负载标头数据组成。 有效负载包含实际数据,而标头包含其他元数据,例如idtimestamp等。下图说明了Spring Integration通信中涉及的不同组件

因此,让我们创建一个示例Spring Integration应用程序:

使用自定义Java接口作为入站网关

  1. 创建一个新的Maven项目。
  2. 将依赖项添加到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>
  3. 创建学生实体类Student.java  如:
    package com.jcombat.entity;public class Student {String name;public Student(String name) {this.name = name;}public String getName() {return name;}
    }
  4. 现在,让我们在上下文文件中配置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从一个组件流向另一个组件。 最终,将消息写到某个地方可能是适当的。 我们可以使用出站适配器编写消息。

  5. 现在,让我们创建在上下文中指定的网关接口,如下所示:
    package com.jcombat.integration;import com.jcombat.entity.Student;public interface DemoGatewayInterface {public void process(Student student);
    }
  6. 创建一个接收器类,该类将在被适配器路由后最终从通道接收传入消息。
    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());}
    }
  7. 就是这个。 最后,我们需要一个客户端来调用网关接口方法。 让我们使用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);}
    }
  8. 将您的应用程序添加到服务器并启动服务器。
  9. 导航到我们在上文第7点中创建的Test.java文件,并将其作为JUnit测试运行。 以下是我们在IDE控制台中看到的日志:

  10. 使用Spring DefaultMessageListener作为入站网关

    1. 创建一个新的Maven项目。
    2. 确保ActiveMQ服务器已启动并正在运行。
    3. 首先是将条目输入pom.xml文件。 因此,这与前面的情况相同。
    4. 让我们编写上下文文件( 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>
    5. 让我们在服务器启动时加载上下文。 为此,请在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>
    6. 创建侦听器类,该类将最终接收消息,如下所示:
      package com.jcombat.listener;public class SimpleMessageListener {public String onMessage(String message) {System.out.println(message);return message;}
      }
    7. 是时候运行我们的应用程序了。 因此,这应该作为:
      1. 发送自定义消息到testQueue

      2. 侦听器被调用,它的onMessage方法被执行,将进入的消息记录为IDE控制台:

      3. 消息通过出站通道并通过出站适配器传递到目标sampleQueue ,如下所示:

    8. 下载源代码

      您可以在此处下载源代码。

翻译自: https://www.javacodegeeks.com/2015/11/introduction-to-spring-integration-framework.html

Spring Integration Framework简介相关推荐

  1. #翻译NO.3# --- Spring Integration Framework

    为什么80%的码农都做不了架构师?>>>    2.4 Message Endpoints A Message Endpoint represents the "filte ...

  2. #翻译NO.5# --- Spring Integration Framework

    为什么80%的码农都做不了架构师?>>>    本人觉得这一章很重要,那就是 Spring默认的channel 的实现 DirectChannel,这个要大家多按照原文理解,开发者为 ...

  3. #翻译NO.4# --- Spring Integration Framework

    为什么80%的码农都做不了架构师?>>>    Part III. Core Messaging This section covers all aspects of the cor ...

  4. amqp rabbitmq_通过Spring Integration和RabbitMQ获得高可用性的AMQP支持的消息通道

    amqp rabbitmq Spring Integration消息通道默认情况下将消息存储在内存中. 这是因为内存速度快,易于实现,并且不会增加网络成本. 但是,在某些情况下,这可能会引起问题,因为 ...

  5. 通过Spring Integration和RabbitMQ获得高可用性的AMQP支持的消息通道

    Spring Integration消息通道默认情况下将消息存储在内存中. 这是因为内存速度快,易于实现,并且不会增加网络成本. 但是,在某些情况下,这可能会引起问题,因为如果应用程序崩溃或服务器意外 ...

  6. Spring Integration学习笔记:简介

    本文是自己学习的总结笔记,主要学习资料如下. https://my.oschina.net/zhzhenqin/blog/86586 https://docs.spring.io/spring-int ...

  7. Spring Integration完整示例

    本文是我们名为" Spring Integration for EAI "的学院课程的一部分. 在本课程中,向您介绍了企业应用程序集成模式以及Spring Integration如 ...

  8. Spring简单使用简介

    Spring简介 Spring是Java的开源企业应用程序开发框架,它为 Java beans控制容器的翻转.最初由Rod Johnson在2003年6月基于Apache2.0许可证发布. Sprin ...

  9. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

最新文章

  1. 【Qt】QTest:编译Qt单元测试程序
  2. django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).
  3. Hbase(3)——desc、alter、时间戳
  4. php采集器分析功能实现
  5. 蓝桥杯 ALGO-62 算法训练 平方计算
  6. 【Pytorch】Pytorch常见的坑汇总
  7. 拓端tecdat|R语言ggmap空间可视化机动车碰撞–街道地图热力图
  8. python3.7安装opencv4.1_VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
  9. R语言批量下载PubMed摘要
  10. Qt|表格代理的实现及使用代码qtableview和qtablewidget均适用
  11. 全面详解互联网企业开放API的 “守护神”
  12. html 的scor属性,html – 什么是css scroll-behavior属性?
  13. java 求任意输入半径,圆的周长和面积。
  14. 安装sql server 过程(为了使用SQL Server Management Studio)
  15. 8421码到5421码的转换_余三码8421bcd码转换电路设计的接线方法
  16. IE浏览器版本测试方法
  17. php think-queue队列的安装使用和Supervisor的安装配置和使用
  18. 中科大计算机苏黎世联邦理工,从国内top10到世界top10-苏黎世联邦理工offer到!...
  19. 群晖监控备份方案,为金融企业信息安全保驾护航
  20. 微信公众平台企业号验证接口、回调 PHP版

热门文章

  1. Redis 的 4 大法宝,2018 必学中间件
  2. Shell入门(十)之echo
  3. 一步一步详解高斯日记
  4. 常用数据库连接串与驱动总结
  5. springboot+mybatis-plus实例demo
  6. Truebine聚合监控
  7. no [query] registered for [filtered] in es7 的解决方法
  8. spring(11)使用对象-关系映射持久化数据
  9. 设计模式 原型模式_创新设计模式:原型模式
  10. jdk8 获取上一个月时间_JDK 10:FutureTask获取一个toString()