zoukankan      html  css  js  c++  java
  • ActiveMQ JMS实现消息发送

    一、创建配置消息发送接收目的地、 ActiveMQ中间件地址

    JMS_BROKER_URL=failover://(tcp://192.168.1.231:61616)
    
    QUEUE_BUSP_TP_SMS_MESSAGE=busp.tp.sms.message

    二、创建消息生产者配置

    <?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:tx="http://www.springframework.org/schema/tx"
        xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:jee="http://www.springframework.org/schema/jee"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
            http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd
            http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd">
         
        <!-- load config file -->
        <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="ignoreUnresolvablePlaceholders" value="true" />
            <property name="locations">
                <list>
                    <value>classpath:property/sms-jms.properties</value>
                </list>
            </property>
        </bean>
          
        <!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供-->  
        <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">  
            <property name="brokerURL" value="${JMS_BROKER_URL}"/>  
        </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="sendMessageDestination" class="org.apache.activemq.command.ActiveMQQueue">  
            <constructor-arg>  
                <value>${QUEUE_BUSP_TP_SMS_MESSAGE}</value>  
            </constructor-arg>  
        </bean>   
    </beans>

    三、创建生产者并发送消息

    package com.busp.tp.sms.sender;
    
    import javax.jms.Destination;
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.Session;
    
    import org.apache.log4j.Logger;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.jms.core.JmsTemplate;
    import org.springframework.jms.core.MessageCreator;
    
    import com.busp.tp.sms.common.SMSMsg;
    
    /**
     * @ClassName: PushJMSSender
     * @version 1.0 
     * @Desc: 向jms发送消息
     * @date 2016年4月21日下午6:01:26
     * @history v1.0
     *
     */
    @SuppressWarnings("resource")
    public class SMSJMSSender {
        // 日志文件
        private static Logger logger = Logger.getLogger(SMSJMSSender.class);
        
        // jms template
        private static JmsTemplate jmsTemplate;
        
        // 目标地址
        private static Destination sendMessageDestination;
        
        static{
            ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:sms-jms-sender.xml");
            ctx.registerShutdownHook();
            sendMessageDestination = (Destination) ctx.getBean("sendMessageDestination");
            jmsTemplate = (JmsTemplate) ctx.getBean("jmsTemplate");
        }
        
       /**
        * 
        * 描述:向JMS推送消息(批量)
        * @date 2016年4月21日下午6:31:48
        * @param pushMsg
        */
        public static void sendJMSMessage(SMSMsg smsMsg){
            try {
                final String result = smsMsg.toJSONString();
                logger.info("向JMS推送消息:" + result);
                jmsTemplate.send(sendMessageDestination, new MessageCreator() {
                    public Message createMessage(Session session)
                            throws JMSException {
                        return session.createTextMessage(result);
                    }
                });
            } catch (Exception e) {
                logger.error("向JMS推送消息发生了异常",e);
            }
        }
        
    
    }

    四、创建接收者配置

    <?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:aop="http://www.springframework.org/schema/aop"
             xmlns:tx="http://www.springframework.org/schema/tx"
             xmlns:context="http://www.springframework.org/schema/context"                                                                                                                                                                                         
             xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"      
             default-lazy-init="false">                                                                                                                                                                                                                            
     
         <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="ignoreUnresolvablePlaceholders" value="true" />
            <property name="locations">
                <list>
                    <value>classpath:property/sms-jms.properties</value>
                </list>
            </property>
        </bean>  
         <!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供-->  
        <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">  
            <property name="brokerURL" value="${JMS_BROKER_URL}"/>  
        </bean>  
         <!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->  
        <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">  
            <!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->  
            <property name="targetConnectionFactory" ref="targetConnectionFactory"/>  
        </bean>  
     
        <!-- ################################### 监听放款信息         Start #####################################-->  
        <bean id="smsMessageQueueDestination" class="org.apache.activemq.command.ActiveMQQueue">  
            <constructor-arg>  
                <value>${QUEUE_BUSP_TP_SMS_MESSAGE}</value>  
            </constructor-arg>  
        </bean>  
        <bean id="smsMessageListener" class="com.busp.tp.sms.listener.SMSMessagelListener"/>  
        <bean id="smsMessageContainer"  
            class="org.springframework.jms.listener.DefaultMessageListenerContainer">  
            <property name="connectionFactory" ref="targetConnectionFactory" />  
            <property name="destination" ref="smsMessageQueueDestination" />  
            <property name="messageListener" ref="smsMessageListener" />  
        </bean>  
        <!-- ################################### 监听放款信息        End #############################
    </beans>

    五、接受者接收消息

    package com.busp.tp.sms.listener;
    
    import javax.annotation.Resource;
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.MessageListener;
    import javax.jms.TextMessage;
    
    import org.apache.log4j.Logger;
    
    import com.busp.common.util.string.StringUtil;
    import com.busp.tp.sms.handler.SMSHandler;
    
    
    /**
     * @ClassName: PushMessageListener
     * @version 1.0 
     * @Desc: TODO
     * @date 2016年4月21日下午4:19:18
     * @history v1.0
     *
     */
    public class SMSMessagelListener  implements MessageListener{
        
        // 日志文件
        private Logger logger = Logger.getLogger(SMSMessagelListener.class);
        @Resource
        private SMSHandler yxtSMSHandler;
        //@Resource
        //private PushMsgHandler androidPushMsgHandler;
    
        @Override
        public void onMessage(Message message) {
            try {
                TextMessage text = (TextMessage) message;
                final String value = text.getText();
                logger.info("接收到客户端发来的消息:"+ value);
            } catch (JMSException e) {
                logger.error("",e);
            }
        }
    }
  • 相关阅读:
    被@ResponseBoby注释的方法在拦截器的posthandle方法中设置cookie失效的问题
    python之异常处理
    python之url编码
    python之发送邮件
    python之使用request模块发送post和get请求
    python之小技巧积累
    python之sys.argv[]
    python之MD5加密
    python之os、sys和random模块
    python之time和datetime的常用方法
  • 原文地址:https://www.cnblogs.com/tianzhongshan/p/6656742.html
Copyright © 2011-2022 走看看