• [activemq]+spring的使用


    一、生产端(Producer)

    applicationContext.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"
           xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    
        <!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供 -->
        <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
            <property name="brokerURL" value="tcp://192.168.137.1:61616" />
            <property name="userName" value="afeng" />
            <property name="password" value="111111" />
        </bean>
    
        <!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->
        <bean id="connectionFactory"
              class="org.springframework.jms.connection.SingleConnectionFactory">
            <!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->
            <property name="targetConnectionFactory" ref="targetConnectionFactory" />
        </bean>
    
    
        <!-- 定义JmsTemplate的Queue类型 -->
        <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
            <constructor-arg ref="connectionFactory"/>
            <!-- 非pub/sub模型(发布/订阅),即队列模式 -->
            <property name="pubSubDomain" value="false"/>
        </bean>
    
        <bean id="queueSender" class="com.afeng.utils.activeMq.QueueSender">
            <property name="JmsTemplate" ref="jmsTemplate"/>
        </bean>
    
        <!-- 定义JmsTemplate的Topic类型 -->
        <bean id="jmsTopicTemplate" class="org.springframework.jms.core.JmsTemplate">
            <!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->
            <constructor-arg ref="connectionFactory"/>
            <!-- pub/sub模型(发布/订阅) -->
            <property name="pubSubDomain" value="true"/>
        </bean>
    
        <bean id="topicSender" class="com.afeng.utils.activeMq.TopicSender">
            <property name="jmsTemplate" ref="jmsTopicTemplate"/>
        </bean>
    
    </beans>
    View Code

    两个封装的类:QueueSender

    package com.afeng.utils.activeMq;
    
    import org.springframework.jms.core.JmsTemplate;
    import org.springframework.jms.core.MessageCreator;
    import org.springframework.stereotype.Component;
    
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.Session;
    
    @Component
    public class QueueSender {
    
        private JmsTemplate jmsTemplate;//通过@Qualifier修饰符来注入对应的bean
    
        public JmsTemplate getJmsTemplate() {
            return jmsTemplate;
        }
    
        public void setJmsTemplate(JmsTemplate jmsTemplate) {
            this.jmsTemplate = jmsTemplate;
        }
    
        /**
         * 发送一条消息到指定的队列(目标)
         * @param queueName 队列名称
         * @param message 消息内容
         */
        public void send(String queueName,final String message){
            jmsTemplate.send(queueName, new MessageCreator() {
                public Message createMessage(Session session) throws JMSException {
                    return session.createTextMessage(message);
                }
            });
        }
    }
    View Code

    TopicSender

    package com.afeng.utils.activeMq;
    
    import org.springframework.jms.core.JmsTemplate;
    import org.springframework.jms.core.MessageCreator;
    import org.springframework.stereotype.Component;
    
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.Session;
    
    @Component
    public class TopicSender {
        private JmsTemplate jmsTemplate;
    
        public JmsTemplate getJmsTemplate() {
            return jmsTemplate;
        }
    
        public void setJmsTemplate(JmsTemplate jmsTemplate) {
            this.jmsTemplate = jmsTemplate;
        }
    
        public void send(String queueName, final String message) {
            this.jmsTemplate.send(queueName, new MessageCreator() {
                @Override
                public Message createMessage(Session session) throws JMSException {
                    return session.createTextMessage(message);
                }
            });
        }
    }
    View Code

    在实际场景中的使用:

    @Autowired
        private QueueSender queueSender;
    
    queueSender.send("spring-queue","要发送的数据");

    二、消费端(Comsumer)

    applicationContext.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"
           xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    
        <!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供 -->
        <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
            <property name="brokerURL" value="tcp://192.168.137.1:61616" />
            <property name="userName" value="afeng" />
            <property name="password" value="111111" />
        </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="queueDestination" class="org.apache.activemq.command.ActiveMQQueue">
            <constructor-arg>
                <value>spring-queue</value>
            </constructor-arg>
        </bean>
        <!--这个是主题目的地,一对多的 -->
        <bean id="topicDestination" class="org.apache.activemq.command.ActiveMQTopic">
            <constructor-arg value="spring-topic" />
        </bean>
    
        <!--监听 数据发生变化-->
        <bean id="itemChangeListener" class="com.afeng.listener.ItemChangeListener" />
        <bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
            <property name="connectionFactory" ref="connectionFactory" />
            <property name="destination" ref="queueDestination" />
            <property name="messageListener" ref="itemChangeListener" />
        </bean>
    
    </beans>
    View Code

    监听的类ItemChangeListener:

    package com.afeng.listener;
    
    import javax.jms.Message;
    import javax.jms.MessageListener;
    import javax.jms.TextMessage;
    
    public class ItemChangeListener implements MessageListener {
        @Override
        public void onMessage(Message message) {
            try {
                TextMessage textMessage = null;
                String queuetxt = "";
                //取商品id
                if (message instanceof TextMessage) {
                    textMessage = (TextMessage) message;
                    queuetxt = textMessage.getText();
                    }
                System.err.println("queuetxt="+queuetxt);
                } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    View Code
  • 相关阅读:
    oracle角色、权限和用户
    轻松解决oracle11g 空表不能exp导出的问题
    oracle 11g杀掉锁的sql
    oracle创建表空间
    js 读取xml文件
    oracle decode函数使用方
    oracle的触发器的实战使用
    oracle获取日期的数字格式,24小时制
    oracle判断表中的某个字段是否为数字trim+translate函数或regexp_like函数
    java String字符串操作 字符串加密等
  • 原文地址:https://www.cnblogs.com/afeng2010/p/10255462.html
Copyright © 2020-2023  润新知