zoukankan      html  css  js  c++  java
  • Spring整合JMS

     一、环境的搭建

    (1)导入依赖

     1     <properties>
     2         <junit.version>4.12</junit.version>
     3         <spring.version>4.3.10.RELEASE</spring.version>
     4     </properties>
     5 
     6     <dependencies>
     7         <dependency>
     8             <groupId>junit</groupId>
     9             <artifactId>junit</artifactId>
    10             <version>${junit.version}</version>
    11 
    12             <scope>test</scope>
    13         </dependency>
    14 
    15         <!-- Spring -->
    16         <dependency>
    17             <groupId>org.springframework</groupId>
    18             <artifactId>spring-context</artifactId>
    19             <version>${spring.version}</version>
    20         </dependency>
    21         <dependency>
    22             <groupId>org.springframework</groupId>
    23             <artifactId>spring-beans</artifactId>
    24             <version>${spring.version}</version>
    25         </dependency>
    26         <dependency>
    27             <groupId>org.springframework</groupId>
    28             <artifactId>spring-webmvc</artifactId>
    29             <version>${spring.version}</version>
    30         </dependency>
    31         <dependency>
    32             <groupId>org.springframework</groupId>
    33             <artifactId>spring-jdbc</artifactId>
    34             <version>${spring.version}</version>
    35         </dependency>
    36         <dependency>
    37             <groupId>org.springframework</groupId>
    38             <artifactId>spring-aspects</artifactId>
    39             <version>${spring.version}</version>
    40         </dependency>
    41         <dependency>
    42             <groupId>org.springframework</groupId>
    43             <artifactId>spring-jms</artifactId>
    44             <version>${spring.version}</version>
    45         </dependency>
    46         <dependency>
    47             <groupId>org.springframework</groupId>
    48             <artifactId>spring-context-support</artifactId>
    49             <version>${spring.version}</version>
    50         </dependency>
    51         <dependency>
    52             <groupId>org.springframework</groupId>
    53             <artifactId>spring-test</artifactId>
    54             <version>${spring.version}</version>
    55         </dependency>
    56         <!--activemq整合包-->
    57         <dependency>
    58             <groupId>org.springframework</groupId>
    59             <artifactId>spring-jms</artifactId>
    60             <version>${spring.version}</version>
    61         </dependency>
    62 
    63         <!--activemq 依赖包-->
    64         <dependency>
    65             <groupId>org.apache.activemq</groupId>
    66             <artifactId>activemq-client</artifactId>
    67             <version>5.13.4</version>
    68         </dependency>
    69     </dependencies>

    (2)创建配置文件

    1、点对点模式配置文件

    applicationContext-jms-producer-queue.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4        xmlns:context="http://www.springframework.org/schema/context"
     5 
     6        xsi:schemaLocation="http://www.springframework.org/schema/beans
     7        http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
     8 
     9     <context:component-scan base-package="com.cenobitor.demo"/>
    10     <!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供-->
    11     <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
    12         <property name="brokerURL" value="tcp://127.0.0.1:61616"/>
    13     </bean>
    14     <!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->
    15     <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
    16         <!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->
    17         <property name="targetConnectionFactory" ref="targetConnectionFactory"/>
    18     </bean>
    19     <!-- Spring提供的JMS工具类,它可以进行消息发送、接收等 -->
    20     <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    21         <!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->
    22         <property name="connectionFactory" ref="connectionFactory"/>
    23     </bean>
    24     <!--这个是队列目的地,点对点的  文本信息-->
    25    <bean id="queueTextDestination" class="org.apache.activemq.command.ActiveMQQueue">
    26         <constructor-arg value="queue_text"/>
    27     </bean>
    28 </beans>

    applicationContext-jms-consumer-queue.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4        xmlns:context="http://www.springframework.org/schema/context"
     5 
     6        xsi:schemaLocation="http://www.springframework.org/schema/beans
     7        http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
     8 
     9     <!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供-->
    10     <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
    11         <property name="brokerURL" value="tcp://127.0.0.1:61616"/>
    12     </bean>
    13     <!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->
    14     <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
    15         <!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->
    16         <property name="targetConnectionFactory" ref="targetConnectionFactory"/>
    17     </bean>
    18 
    19     <!--这个是队列目的地,点对点的  文本信息 与生产者中相应的配置一致-->
    20     <bean id="queueTextDestination" class="org.apache.activemq.command.ActiveMQQueue">
    21         <constructor-arg value="queue_text"/>
    22     </bean>
    23 
    24     <!--我的监听类-->
    25     <bean id="myMessageListener" class="com.cenobitor.demo.MyMessageListener"></bean>
    26     <!--监听容器-->
    27     <bean  class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    28         <property name="connectionFactory" ref="targetConnectionFactory"/>
    29         <property name="destination" ref="queueTextDestination"/>
    30         <property name="messageListener" ref="myMessageListener"/>
    31     </bean>
    32 </beans>

    2、发布/订阅模式

    applicationContext-jms-producer-topic.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4        xmlns:context="http://www.springframework.org/schema/context"
     5        xsi:schemaLocation="http://www.springframework.org/schema/beans
     6        http://www.springframework.org/schema/beans/spring-beans.xsd 
     7     http://www.springframework.org/schema/context 
     8     http://www.springframework.org/schema/context/spring-context.xsd">
     9 
    10     <context:component-scan base-package="com.cenobitor.demo"/>
    11 
    12     <!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供-->
    13     <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
    14         <property name="brokerURL" value="tcp://127.0.0.1:61616"/>
    15     </bean>
    16     <!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->
    17     <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
    18         <!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->
    19         <property name="targetConnectionFactory" ref="targetConnectionFactory"/>
    20     </bean>
    21     <!-- Spring提供的JMS工具类,它可以进行消息发送、接收等 -->
    22     <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    23         <!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->
    24         <property name="connectionFactory" ref="connectionFactory"/>
    25     </bean>
    26 
    27     <!--这个是订阅模式  文本信息-->
    28     <bean id="topicTextDestination" class="org.apache.activemq.command.ActiveMQTopic">
    29         <constructor-arg value="topic_text"/>
    30     </bean>
    31 </beans>

    applicationContext-jms-consumer-topic.xml

     1 <beans xmlns="http://www.springframework.org/schema/beans"
     2        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
     3 
     4     <!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供-->
     5     <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
     6         <property name="brokerURL" value="tcp://127.0.0.1:61616"/>
     7     </bean>
     8     <!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->
     9     <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
    10         <!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->
    11         <property name="targetConnectionFactory" ref="targetConnectionFactory"/>
    12     </bean>
    13 
    14     <!--这个是队列目的地,点对点的  文本信息-->
    15     <bean id="topicTextDestination" class="org.apache.activemq.command.ActiveMQTopic">
    16         <constructor-arg value="topic_text"/>
    17     </bean>
    18 
    19     <!--我的监听类-->
    20     <bean id="myMessageListener" class="com.cenobitor.demo.MyMessageListener"></bean>
    21     <!--监听容器-->
    22     <bean  class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    23         <property name="connectionFactory" ref="targetConnectionFactory"/>
    24         <property name="destination" ref="topicTextDestination"/>
    25         <property name="messageListener" ref="myMessageListener"/>
    26     </bean>
    27 
    28 </beans>

    二、点对点模式

    1、创建消息生产者

     1 @Component
     2 public class QueueProducer {
     3 
     4     @Autowired
     5     private JmsTemplate jmsTemplate;
     6 
     7     @Autowired
     8     private Destination destination;
     9 
    10     public void sendTextMessage(final String text){
    11         jmsTemplate.send(destination, new MessageCreator() {
    12             @Override
    13             public Message createMessage(Session session) throws JMSException {
    14                 return session.createTextMessage(text);
    15             }
    16         });
    17     }
    18 }

    2、编写监听类

     1 public class MyMessageListener implements MessageListener {
     2 
     3     @Override
     4     public void onMessage(Message message) {
     5         TextMessage textMessage = (TextMessage) message;
     6         try {
     7             System.out.println("接收到消息:"+textMessage.getText());
     8         } catch (JMSException e) {
     9             e.printStackTrace();
    10         }
    11     }
    12 }

    3、创建测试类

    1 @RunWith(SpringRunner.class)
    2 @ContextConfiguration("classpath:applicationContext-jms-consumer-queue.xml")
    3 public class TestQueue {
    4 
    5     @Test
    6     public void onMessage() throws IOException {
    7         System.in.read();
    8     }
    9 }

    三、发布/订阅模式

    1、创建消息生产者

     1 @Component
     2 public class TopicProducer {
     3     @Autowired
     4     private JmsTemplate jmsTemplate;
     5 
     6     @Autowired
     7     private Destination topicTextDestination;
     8 
     9     public void sendTextMessage(final String text){
    10         //此方法等同于下面被注释部分
    11         jmsTemplate.convertAndSend(topicTextDestination,text);
    12 
    13         /*jmsTemplate.send(topicTextDestination, new MessageCreator() {
    14                 @Override
    15                 public Message createMessage(Session session) throws JMSException {
    16                      return session.createTextMessage(text);
    17                 }
    18           });*/
    19     }
    20 }

    2、监听类同点对点

    3、创建消费者测试类

    1 @RunWith(SpringRunner.class)
    2 @ContextConfiguration("classpath:applicationContext-jms-consumer-topic.xml")
    3 public class TestTopic {
    4 
    5     @Test
    6     public void onMessage() throws IOException {
    7         System.in.read();
    8     }
    9 }
    测试:同时运行三个消费者工程,在运行生产者工程,查看三个消费者工程的控制台输出。
  • 相关阅读:
    mysql 之 double( totalsize, decimal)
    java8 实战--- Map merge用法
    java8 stream接口 终端操作 min,max,findFirst,findAny
    tinyint(1)详解
    表单插件——form
    表单验证插件——validate
    使用ajaxStart()和ajaxStop()方法
    使用ajaxSetup()方法设置全局Ajax默认选项
    使用ajax()方法加载服务器数据
    使用serialize()方法序列化表单元素值
  • 原文地址:https://www.cnblogs.com/gdwkong/p/9020165.html
Copyright © 2011-2022 走看看