zoukankan      html  css  js  c++  java
  • tomcat监听activemq jms配置

    当从webservice接收到信息的时候,消息生产者producer立刻把收到的消息放入到jms里面,消费者cusomer这时要设置一个监听,当生产者发送消息时,只要消息被发出来,消费者就会接收到消息,然后进行相应的操作。

    在tomcat里面,要进行配置。

    首先在tomcat安装目录里面,对conf/context.xml进行配置,加入以下代码:

    <Resource
    
            name="jms/FailoverConnectionFactory"
    
            auth="Container"
    
            type="org.apache.activemq.ActiveMQConnectionFactory"
    
            description="JMS Connection Factory"
    
            factory="org.apache.activemq.jndi.JNDIReferenceFactory"
    
        brokerURL="failover:(tcp://localhost:61616)?initialReconnectDelay=100&amp;maxReconnectAttempts=5"
    
            brokerName="localhost"
    
            useEmbeddedBroker="false"/>
    
        <Resource
    
            name="jms/NormalConnectionFactory"
    
            auth="Container"
    
            type="org.apache.activemq.ActiveMQConnectionFactory"
    
            description="JMS Connection Factory"
    
            factory="org.apache.activemq.jndi.JNDIReferenceFactory"
    
            brokerURL="tcp://localhost:61616"
    
            brokerName="localhost"
    
            useEmbeddedBroker="false"/>
    
        <Resource name="jms/topic/MyTopic"
    
            auth="Container"
    
            type="org.apache.activemq.command.ActiveMQTopic"
    
            factory="org.apache.activemq.jndi.JNDIReferenceFactory"
    
            physicalName="MY.TEST.FOO"/>
    
        <Resource name="jms/queue/MyQueue"
    
            auth="Container"
    
            type="org.apache.activemq.command.ActiveMQQueue"
    
            factory="org.apache.activemq.jndi.JNDIReferenceFactory"
    
            physicalName="MY.TEST.FOO.QUEUE"/> 

    具体也不晓得这个是做什么的,看上去貌似是配置jndi的,我没用jndi的方式,加上这个,也正常运行。所以还是加上吧。

    然后在web.xml里面,加入监听的类,这个类是自己写的。

      <!-- 添加jms监听 -->
      <servlet>
        <servlet-name>jms-listener</servlet-name>
        <servlet-class>
            com.message.JMSListener
        </servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>

    然后就建立这个类:

    package com.message;
    
    import javax.jms.Connection;
    import javax.jms.ConnectionFactory;
    import javax.jms.Destination;
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.MessageConsumer;
    import javax.jms.MessageListener;
    import javax.jms.ObjectMessage;
    import javax.jms.Session;
    import javax.servlet.http.HttpServlet;
    
    import org.apache.activemq.ActiveMQConnection;
    import org.apache.activemq.ActiveMQConnectionFactory;
    import org.apache.log4j.Logger;public class JMSListener extends HttpServlet implements MessageListener {
        /**
         * 
         */
        private static final long serialVersionUID = -8455543162505698971L;
        private Logger logger=Logger.getLogger(JMSListener.class);
        
        ConnectionFactory connectionFactory;
        Connection connection=null;
        Session session;
        Destination destination;
        MessageConsumer consumer;
        int i;
        
        public JMSListener(){
            String url = "tcp://localhost:61616";
            String queue ="NewNocPacket";
            connectionFactory = new ActiveMQConnectionFactory(
                    ActiveMQConnection.DEFAULT_USER,
                    ActiveMQConnection.DEFAULT_PASSWORD, url);
                    try {
                        connection = connectionFactory.createConnection();
                        session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
                        destination = session.createQueue(queue);
                        consumer = session.createConsumer(destination);
                        consumer.setMessageListener(this);
                        connection.start();
                    } catch (JMSException e) {
                        // TODO Auto-generated catch block
                        logger.error("===========cusumer create error");
                        e.printStackTrace();
                    }
        }
                
        @Override
        public void onMessage(Message message) {
            // TODO Auto-generated method stub
            ObjectMessage msg=(ObjectMessage) message;try {
                    logger.info("=========hello ===========");
                    i++;
                } catch (JMSException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
        }
    
    }

    原理大概是这样,上面代码不要照抄的。

    然后就ok了,部署一下项目,建立一个消息的发送者,消息到达后,监听就会自动执行,打印出onmessage里面的话。

  • 相关阅读:
    EKLM3S8962之LED
    [uClinuxdev] detecting stack overflow
    Eclipse换行符
    EKLM3S8962之OLED
    Windows 环境下 GNU ARM 开发环境建立
    关于阻焊层和助焊层的理解
    MISRA C 2004中文版
    对话框托盘程序实现源码
    VC++中四种进程或线程同步互斥的控制方法
    Windows线程同步与互斥技术总结
  • 原文地址:https://www.cnblogs.com/juepei/p/3867706.html
Copyright © 2011-2022 走看看