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();

    }

    }

    }

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

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

  • 相关阅读:
    图论一角
    入门-k8s部署应用 (三)
    入门-k8s集群环境搭建(二)
    入门-Kubernetes概述 (一)
    shell中获取时间
    Linux shell脚本之 if条件判断 (转)
    linux中shell变量$#等的释义
    shell 的here document 用法 (cat << EOF) (转)
    Homebrew的安装与使用
    docker容器编排 (4)
  • 原文地址:https://www.cnblogs.com/hxun/p/11246054.html
Copyright © 2011-2022 走看看