zoukankan      html  css  js  c++  java
  • Spring整合JMS消息中间件

    1、 点对点模式

    1.1消息生产者

    (1)创建工程springjms_producer,在POM文件中引入SpringJms activeMQ以及单元测试相关依赖  

    2)在src/main/resources下创建spring配置文件applicationContext-jms-producer.xml

    <context:component-scan base-package="cn.itcast.demo"></context:component-scan>        

        <!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供-->  

    <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">  

        <property name="brokerURL" value="tcp://192.168.25.135:61616"/>  

    </bean>          

        <!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->  

    <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">  

    <!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->  

        <property name="targetConnectionFactory" ref="targetConnectionFactory"/>  

    </bean>      

        <!-- Spring提供的JMS工具类,它可以进行消息发送、接收等 -->  

    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">  

        <!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->  

        <property name="connectionFactory" ref="connectionFactory"/>  

    </bean>      

        <!--这个是队列目的地,点对点的  文本信息-->  

    <bean id="queueTextDestination" class="org.apache.activemq.command.ActiveMQQueue">  

        <constructor-arg value="queue_text"/>  

    </bean>    

    3)在cn.itcast.demo包下创建消息生产者类

    @Component

    public class QueueProducer {

    @Autowired

    private JmsTemplate jmsTemplate;

    @Autowired

    private Destination queueTextDestination;

    /**

     * 发送文本消息

     * @param text

     */

    public void sendTextMessage(final String text){

    jmsTemplate.send(queueTextDestination, new MessageCreator() {

    public Message createMessage(Session session) throws JMSException {

    return session.createTextMessage(text);

    }

    });

    }

    }

    4)单元测试

    src/test/java创建测试类

    @RunWith(SpringJUnit4ClassRunner.class)

    @ContextConfiguration(locations="classpath:applicationContext-jms-producer.xml")

    public class TestQueue {

    @Autowired

    private QueueProducer queueProducer;

    @Test

    public void testSend(){

    queueProducer.sendTextMessage("SpringJms-点对点");

    }

    }

    1.2消息消费者

    (1)创建工程springjms_consumer,在POM文件中引入依赖 (同上一个工程)

    2)创建配置文件 applicationContext-jms-consumer-queue.xml

        <!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供-->  

    <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">  

        <property name="brokerURL" value="tcp://192.168.25.135:61616"/>  

    </bean>    

        <!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->  

    <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">  

    <!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->  

        <property name="targetConnectionFactory" ref="targetConnectionFactory"/>  

    </bean>  

        <!--这个是队列目的地,点对点的  文本信息-->  

    <bean id="queueTextDestination" class="org.apache.activemq.command.ActiveMQQueue">  

        <constructor-arg value="queue_text"/>  

    </bean>    

    <!-- 我的监听类 -->

    <bean id="myMessageListener" class="cn.itcast.demo.MyMessageListener"></bean>

    <!-- 消息监听容器 -->

    <bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">

    <property name="connectionFactory" ref="connectionFactory" />

    <property name="destination" ref="queueTextDestination" />

    <property name="messageListener" ref="myMessageListener" />

    </bean>

    3)编写监听类

    public class MyMessageListener implements MessageListener {

    public void onMessage(Message message) {

    TextMessage textMessage=(TextMessage)message;

    try {

    System.out.println("接收到消息:"+textMessage.getText());

    } catch (JMSException e) {

    e.printStackTrace();

    }

    }

    }

    4)创建测试类

    @RunWith(SpringJUnit4ClassRunner.class)

    @ContextConfiguration(locations="classpath:applicationContext-jms-consumer-queue.xml")

    public class TestQueue {

    @Test

    public void testQueue(){

    try {

    System.in.read();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    2、发布/订阅模式

    2.1消息生产者

    1)在工程springjms_producerapplicationContext-jms-producer.xml增加配置

    <!--这个是订阅模式  文本信息-->  

    <bean id="topicTextDestination" class="org.apache.activemq.command.ActiveMQTopic">  

        <constructor-arg value="topic_text"/>  

    </bean>  

    2)创建生产者类

    @Component

    public class TopicProducer {

    @Autowired

    private JmsTemplate jmsTemplate;

    @Autowired

    private Destination topicTextDestination;

    /**

     * 发送文本消息

     * @param text

     */

    public void sendTextMessage(final String text){

    jmsTemplate.send(topicTextDestination, new MessageCreator() {

    public Message createMessage(Session session) throws JMSException {

    return session.createTextMessage(text);

    }

    });

    }

    }

    3)编写测试类

    import org.junit.Test;

    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 cn.itcast.demo.TopicProducer;

    @RunWith(SpringJUnit4ClassRunner.class)

    @ContextConfiguration(locations="classpath:applicationContext-activemq-producer.xml")

    public class TestTopic {

    @Autowired

    private TopicProducer topicProducer;

    @Test

    public void sendTextQueue(){

    topicProducer.sendTextMessage();

    }

    }

    2.2消息消费者

    (1)activemq-spring-consumer工程中创建配置文件applicationContext-jms-consumer-topic.xml

        <!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供-->  

    <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">  

        <property name="brokerURL" value="tcp://192.168.25.135:61616"/>  

    </bean>

        <!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->  

    <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">  

    <!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->  

        <property name="targetConnectionFactory" ref="targetConnectionFactory"/>  

    </bean>  

        <!--这个是队列目的地,点对点的  文本信息-->  

    <bean id="topicTextDestination" class="org.apache.activemq.command.ActiveMQTopic">  

        <constructor-arg value="topic_text"/>  

    </bean>    

    <!-- 我的监听类 -->

    <bean id="myMessageListener" class="cn.itcast.demo.MyMessageListener"></bean>

    <!-- 消息监听容器 -->

    <bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">

    <property name="connectionFactory" ref="connectionFactory" />

    <property name="destination" ref="topicTextDestination" />

    <property name="messageListener" ref="myMessageListener" />

    </bean>

    (2)编写测试类

    @RunWith(SpringJUnit4ClassRunner.class)

    @ContextConfiguration(locations="classpath:applicationContext-jms-consumer-topic.xml")

    public class TestTopic {

    @Test

    public void testTopic(){

    try {

    System.in.read();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    测试:同时运行三个消费者工程,在运行生产者工程,查看三个消费者工程的控制台输出。

    完毕!留个赞再走呗 (* ̄︶ ̄) !

  • 相关阅读:
    Fidder4 顶部提示 “The system proxy was changed,click to reenable fiddler capture”。
    redis 哨兵 sentinel master slave 连接建立过程
    虚拟点赞浏览功能的大数据量测试
    python基础练习题(题目 字母识词)
    python基础练习题(题目 回文数)
    python基础练习题(题目 递归求等差数列)
    python基础练习题(题目 递归输出)
    python基础练习题(题目 递归求阶乘)
    python基础练习题(题目 阶乘求和)
    python基础练习题(题目 斐波那契数列II)
  • 原文地址:https://www.cnblogs.com/hxun/p/11246054.html
Copyright © 2011-2022 走看看