• ActiveMq实例


    1.发布端

    import javax.jms.Connection;  
    import javax.jms.ConnectionFactory;  
    import javax.jms.DeliveryMode;  
    import javax.jms.Destination;  
    import javax.jms.JMSException;  
    import javax.jms.Message;  
    import javax.jms.MessageProducer;  
    import javax.jms.Session;  
      
    import org.apache.activemq.ActiveMQConnection;  
    import org.apache.activemq.ActiveMQConnectionFactory;  
    import org.slf4j.Logger;  
    import org.slf4j.LoggerFactory;  
      
    public class Publisher   
    {  
        private static Logger logger = LoggerFactory.getLogger(Publisher.class);  
          
        public static void main(String[] args)   
        {  
            ConnectionFactory connectionFactory;  
            Connection connection = null;  
            Session session;  
            MessageProducer producer;  
            connectionFactory = new ActiveMQConnectionFactory(  
                    ActiveMQConnection.DEFAULT_USER,  
                    ActiveMQConnection.DEFAULT_PASSWORD,  
                    "tcp://localhost:61616");  
            try   
            {  
                connection = connectionFactory.createConnection();  
                connection.start();  
                  
                session = connection.createSession(Boolean.TRUE,  
                        Session.AUTO_ACKNOWLEDGE);  
      
                //注意这里与ptp例子的区别,使用null作为destination  
                producer = session.createProducer(null);  
                  
                producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);  
                  
                sendMessage(session, producer);  
                  
                session.commit();  
            }   
            catch (Exception e)  
            {  
                e.printStackTrace();  
            }  
            finally   
            {  
                try   
                {  
                    if (null != connection)  
                        connection.close();  
                }  
                catch (Throwable ignore)   
                {  
                }  
            }  
          
        }  
      
        private static void sendMessage(Session session, MessageProducer producer) throws JMSException   
        {  
            Destination destination = session.createTopic("pub/sub");  
            Message message = session.createMapMessage();  
            message.setStringProperty("company", "alibaba");  
            message.setStringProperty("department", "b2b");  
            logger.info("destination is {};message is ready to send", destination);  
              
            producer.send(destination, message);  
        }  
    }  

    2.接收端

    import javax.jms.Connection;  
    import javax.jms.ConnectionFactory;  
    import javax.jms.Destination;  
    import javax.jms.MessageConsumer;  
    import javax.jms.Session;  
      
    import org.apache.activemq.ActiveMQConnection;  
    import org.apache.activemq.ActiveMQConnectionFactory;  
      
      
    public class Subscribe   
    {  
        public static void main(String[] args)   
        {  
            ConnectionFactory connectionFactory;  
            Connection connection = null;  
            Session session;  
            Destination destination;  
            MessageConsumer consumer;  
              
            connectionFactory = new ActiveMQConnectionFactory(  
                    ActiveMQConnection.DEFAULT_USER,  
                    ActiveMQConnection.DEFAULT_PASSWORD,  
                    "tcp://localhost:61616");  
            try   
            {  
                connection = connectionFactory.createConnection();  
                connection.start();  
                session = connection.createSession(Boolean.FALSE,  
                        Session.AUTO_ACKNOWLEDGE);  
                  
                destination = session.createTopic("pub/sub");  
                consumer = session.createConsumer(destination);  
                  
                //设置指定的监听器  
                consumer.setMessageListener(new MyListener());  
                  
                Thread.sleep(100*1000);  
            }   
            catch (Exception e)   
            {  
                e.printStackTrace();  
            }  
            finally   
            {  
                try   
                {  
                    if (null != connection)  
                        connection.close();  
                }  
                catch (Throwable ignore)   
                {  
                }  
            }  
          
        }  
    }  

    3.监听器

    import javax.jms.JMSException;  
    import javax.jms.MapMessage;  
    import javax.jms.Message;  
    import javax.jms.MessageListener;  
      
    import org.slf4j.Logger;  
    import org.slf4j.LoggerFactory;  
      
    public class MyListener implements MessageListener   
    {  
        private static Logger logger = LoggerFactory.getLogger(MyListener.class);  
          
        public void onMessage(Message message)   
        {  
            MapMessage mapMessage = (MapMessage) message;  
            try   
            {  
                String company = mapMessage.getStringProperty("company");  
                String department = mapMessage.getStringProperty("department");  
                  
                logger.info("company is {} ; department is {}", company,department);   
            } catch (JMSException e)   
            {  
                e.printStackTrace();  
            }  
        }  
    }  

    4.测试

    先启动接收端,再启动发布端,结果为:

    [main] INFO com.mycompany.app.pub.sub.Publisher - destination is topic://pub/sub;message is ready to send 

    [ActiveMQ Session Task-1] INFO com.mycompany.app.pub.sub.MyListener - company is alibaba ; department is b2b  

  • 相关阅读:
    Django学习-9-ORM多对多操作
    Django学习-8-模板渲染的一些特性
    Django学习-7-ORM操作
    Django学习-6-路由系统
    Hadoop 知识
    最全的Spark基础知识解答
    windows server 2008 R2 远程连接用户数修改
    Windows 2008 R2 SP1部署WSUS 3.0 SP2
    Windows Server2008 R2 设置NAT 让Hyper-V连接Internet
    免费好用的Microsoft iSCSI Software Target 3.3
  • 原文地址:https://www.cnblogs.com/enki-fang/p/9198105.html
Copyright © 2020-2023  润新知