• Jms学习篇二:ActiveMQ


    ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线

    安装

    1》下载:到http://activemq.apache.org/download.html 下载最新版本, 解压apache-activemq-5.9.1-bin.zip

    2》配置环境变量:path:D:Development Toolsapache-activemq-5.11.1in

    3》启动测试binactivemq.bat(activemq) 启动

    4》服务启动地址:http://192.168.0.107:8161/admin/ (前面为本地电脑IP地址)

        用户名/密码: admin/admin

    1.点对点

    消息生产者
    package com.java1234.activemq;
    
    import javax.jms.Connection;
    import javax.jms.ConnectionFactory;
    import javax.jms.Destination;
    import javax.jms.JMSException;
    import javax.jms.MessageProducer;
    import javax.jms.Session;
    import javax.jms.TextMessage;
    
    import org.apache.activemq.ActiveMQConnection;
    import org.apache.activemq.ActiveMQConnectionFactory;
    
    /**
     * 消息生产者
     * @author Administrator
     *
     */
    public class JMSProducer {
    
        private static final String USERNAME=ActiveMQConnection.DEFAULT_USER; // 默认的连接用户名
        private static final String PASSWORD=ActiveMQConnection.DEFAULT_PASSWORD; // 默认的连接密码
        private static final String BROKEURL=ActiveMQConnection.DEFAULT_BROKER_URL; // 默认的连接地址
        private static final int SENDNUM=10; // 发送的消息数量
        
        public static void main(String[] args) {
            
            ConnectionFactory connectionFactory; // 连接工厂
            Connection connection = null; // 连接
            Session session; // 会话 接受或者发送消息的线程
            Destination destination; // 消息的目的地
            MessageProducer messageProducer; // 消息生产者
            
            // 实例化连接工厂
            connectionFactory=new ActiveMQConnectionFactory(JMSProducer.USERNAME, JMSProducer.PASSWORD, JMSProducer.BROKEURL);
            
            try {
                connection=connectionFactory.createConnection(); // 通过连接工厂获取连接
                connection.start(); // 启动连接
                session=connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE); // 创建Session
                destination=session.createQueue("FirstQueue1"); // 创建消息队列
                messageProducer=session.createProducer(destination); // 创建消息生产者
                sendMessage(session, messageProducer); // 发送消息
                session.commit();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally{
                if(connection!=null){
                    try {
                        connection.close();
                    } catch (JMSException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }
        
        /**
         * 发送消息
         * @param session
         * @param messageProducer
         * @throws Exception
         */
        public static void sendMessage(Session session,MessageProducer messageProducer)throws Exception{
            for(int i=0;i<JMSProducer.SENDNUM;i++){
                TextMessage message=session.createTextMessage("ActiveMQ 发送的消息"+i);
                System.out.println("发送消息:"+"ActiveMQ 发送的消息"+i);
                messageProducer.send(message);
            }
        }
    }
    View Code
    消息消费者
    package com.java1234.activemq;
    
    import javax.jms.Connection;
    import javax.jms.ConnectionFactory;
    import javax.jms.Destination;
    import javax.jms.JMSException;
    import javax.jms.MessageConsumer;
    import javax.jms.Session;
    import javax.jms.TextMessage;
    
    import org.apache.activemq.ActiveMQConnection;
    import org.apache.activemq.ActiveMQConnectionFactory;
    
    /**
     * 消息消费者
     * @author Administrator
     *
     */
    public class JMSConsumer {
    
        private static final String USERNAME=ActiveMQConnection.DEFAULT_USER; // 默认的连接用户名
        private static final String PASSWORD=ActiveMQConnection.DEFAULT_PASSWORD; // 默认的连接密码
        private static final String BROKEURL=ActiveMQConnection.DEFAULT_BROKER_URL; // 默认的连接地址
        
        public static void main(String[] args) {
            ConnectionFactory connectionFactory; // 连接工厂
            Connection connection = null; // 连接
            Session session; // 会话 接受或者发送消息的线程
            Destination destination; // 消息的目的地
            MessageConsumer messageConsumer; // 消息的消费者
            
            // 实例化连接工厂
            connectionFactory=new ActiveMQConnectionFactory(JMSConsumer.USERNAME, JMSConsumer.PASSWORD, JMSConsumer.BROKEURL);
                    
            try {
                connection=connectionFactory.createConnection();  // 通过连接工厂获取连接
                connection.start(); // 启动连接
                session=connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE); // 创建Session
                destination=session.createQueue("FirstQueue1");  // 创建连接的消息队列
                messageConsumer=session.createConsumer(destination); // 创建消息消费者
                while(true){
                    TextMessage textMessage=(TextMessage)messageConsumer.receive(100000);
                    if(textMessage!=null){
                        System.out.println("收到的消息:"+textMessage.getText());
                    }else{
                        break;
                    }
                }
            } catch (JMSException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
        }
    }
    View Code
    消息消费者2(监听模式)
    package com.java1234.activemq;
    
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.MessageListener;
    import javax.jms.TextMessage;
    
    /**
     * 消息监听
     * @author Administrator
     *
     */
    public class Listener implements MessageListener{
    
        @Override
        public void onMessage(Message message) {
            // TODO Auto-generated method stub
            try {
                System.out.println("收到的消息:"+((TextMessage)message).getText());
            } catch (JMSException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
    }
    View Code
    package com.java1234.activemq;
    
    import javax.jms.Connection;
    import javax.jms.ConnectionFactory;
    import javax.jms.Destination;
    import javax.jms.JMSException;
    import javax.jms.MessageConsumer;
    import javax.jms.Session;
    import javax.jms.TextMessage;
    
    import org.apache.activemq.ActiveMQConnection;
    import org.apache.activemq.ActiveMQConnectionFactory;
    
    /**
     * 消息消费者
     * @author Administrator
     *
     */
    public class JMSConsumer2 {
    
        private static final String USERNAME=ActiveMQConnection.DEFAULT_USER; // 默认的连接用户名
        private static final String PASSWORD=ActiveMQConnection.DEFAULT_PASSWORD; // 默认的连接密码
        private static final String BROKEURL=ActiveMQConnection.DEFAULT_BROKER_URL; // 默认的连接地址
        
        public static void main(String[] args) {
            ConnectionFactory connectionFactory; // 连接工厂
            Connection connection = null; // 连接
            Session session; // 会话 接受或者发送消息的线程
            Destination destination; // 消息的目的地
            MessageConsumer messageConsumer; // 消息的消费者
            
            // 实例化连接工厂
            connectionFactory=new ActiveMQConnectionFactory(JMSConsumer2.USERNAME, JMSConsumer2.PASSWORD, JMSConsumer2.BROKEURL);
                    
            try {
                connection=connectionFactory.createConnection();  // 通过连接工厂获取连接
                connection.start(); // 启动连接
                session=connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE); // 创建Session
                destination=session.createQueue("FirstQueue1");  // 创建连接的消息队列
                messageConsumer=session.createConsumer(destination); // 创建消息消费者
                messageConsumer.setMessageListener(new Listener()); // 注册消息监听
            } catch (JMSException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
        }
    }
    View Code

    2.订阅/发布

    消息发布者

    package com.java1234.activemq2;
    
    import javax.jms.Connection;
    import javax.jms.ConnectionFactory;
    import javax.jms.Destination;
    import javax.jms.JMSException;
    import javax.jms.MessageProducer;
    import javax.jms.Session;
    import javax.jms.TextMessage;
    
    import org.apache.activemq.ActiveMQConnection;
    import org.apache.activemq.ActiveMQConnectionFactory;
    
    /**
     * 消息生产者-消息发布者
     * @author Administrator
     *
     */
    public class JMSProducer {
    
        private static final String USERNAME=ActiveMQConnection.DEFAULT_USER; // 默认的连接用户名
        private static final String PASSWORD=ActiveMQConnection.DEFAULT_PASSWORD; // 默认的连接密码
        private static final String BROKEURL=ActiveMQConnection.DEFAULT_BROKER_URL; // 默认的连接地址
        private static final int SENDNUM=10; // 发送的消息数量
        
        public static void main(String[] args) {
            
            ConnectionFactory connectionFactory; // 连接工厂
            Connection connection = null; // 连接
            Session session; // 会话 接受或者发送消息的线程
            Destination destination; // 消息的目的地
            MessageProducer messageProducer; // 消息生产者
            
            // 实例化连接工厂
            connectionFactory=new ActiveMQConnectionFactory(JMSProducer.USERNAME, JMSProducer.PASSWORD, JMSProducer.BROKEURL);
            
            try {
                connection=connectionFactory.createConnection(); // 通过连接工厂获取连接
                connection.start(); // 启动连接
                session=connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE); // 创建Session
                // destination=session.createQueue("FirstQueue1"); // 创建消息队列
                destination=session.createTopic("FirstTopic1");
                messageProducer=session.createProducer(destination); // 创建消息生产者
                sendMessage(session, messageProducer); // 发送消息
                session.commit();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally{
                if(connection!=null){
                    try {
                        connection.close();
                    } catch (JMSException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }
        
        /**
         * 发送消息
         * @param session
         * @param messageProducer
         * @throws Exception
         */
        public static void sendMessage(Session session,MessageProducer messageProducer)throws Exception{
            for(int i=0;i<JMSProducer.SENDNUM;i++){
                TextMessage message=session.createTextMessage("ActiveMQ 发送的消息"+i);
                System.out.println("发送消息:"+"ActiveMQ 发布的消息"+i);
                messageProducer.send(message);
            }
        }
    }
    View Code

    订阅者1

    package com.java1234.activemq2;
    
    import javax.jms.Connection;
    import javax.jms.ConnectionFactory;
    import javax.jms.Destination;
    import javax.jms.JMSException;
    import javax.jms.MessageConsumer;
    import javax.jms.Session;
    
    import org.apache.activemq.ActiveMQConnection;
    import org.apache.activemq.ActiveMQConnectionFactory;
    
    /**
     * 消息消费者-消息订阅者一
     * @author Administrator
     *
     */
    public class JMSConsumer {
    
        private static final String USERNAME=ActiveMQConnection.DEFAULT_USER; // 默认的连接用户名
        private static final String PASSWORD=ActiveMQConnection.DEFAULT_PASSWORD; // 默认的连接密码
        private static final String BROKEURL=ActiveMQConnection.DEFAULT_BROKER_URL; // 默认的连接地址
        
        public static void main(String[] args) {
            ConnectionFactory connectionFactory; // 连接工厂
            Connection connection = null; // 连接
            Session session; // 会话 接受或者发送消息的线程
            Destination destination; // 消息的目的地
            MessageConsumer messageConsumer; // 消息的消费者
            
            // 实例化连接工厂
            connectionFactory=new ActiveMQConnectionFactory(JMSConsumer.USERNAME, JMSConsumer.PASSWORD, JMSConsumer.BROKEURL);
                    
            try {
                connection=connectionFactory.createConnection();  // 通过连接工厂获取连接
                connection.start(); // 启动连接
                session=connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE); // 创建Session
                // destination=session.createQueue("FirstQueue1");  // 创建连接的消息队列
                destination=session.createTopic("FirstTopic1");
                messageConsumer=session.createConsumer(destination); // 创建消息消费者
                messageConsumer.setMessageListener(new Listener()); // 注册消息监听
            } catch (JMSException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
        }
    }
    
    
    package com.java1234.activemq2;
    
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.MessageListener;
    import javax.jms.TextMessage;
    
    /**
     * 消息监听-订阅者一
     * @author Administrator
     *
     */
    public class Listener implements MessageListener{
    
        @Override
        public void onMessage(Message message) {
            // TODO Auto-generated method stub
            try {
                System.out.println("订阅者一收到的消息:"+((TextMessage)message).getText());
            } catch (JMSException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
    }
    View Code

    订阅者2

    package com.java1234.activemq2;
    
    import javax.jms.Connection;
    import javax.jms.ConnectionFactory;
    import javax.jms.Destination;
    import javax.jms.JMSException;
    import javax.jms.MessageConsumer;
    import javax.jms.Session;
    
    import org.apache.activemq.ActiveMQConnection;
    import org.apache.activemq.ActiveMQConnectionFactory;
    
    /**
     * 消息消费者-消息订阅者二
     * @author Administrator
     *
     */
    public class JMSConsumer2 {
    
        private static final String USERNAME=ActiveMQConnection.DEFAULT_USER; // 默认的连接用户名
        private static final String PASSWORD=ActiveMQConnection.DEFAULT_PASSWORD; // 默认的连接密码
        private static final String BROKEURL=ActiveMQConnection.DEFAULT_BROKER_URL; // 默认的连接地址
        
        public static void main(String[] args) {
            ConnectionFactory connectionFactory; // 连接工厂
            Connection connection = null; // 连接
            Session session; // 会话 接受或者发送消息的线程
            Destination destination; // 消息的目的地
            MessageConsumer messageConsumer; // 消息的消费者
            
            // 实例化连接工厂
            connectionFactory=new ActiveMQConnectionFactory(JMSConsumer2.USERNAME, JMSConsumer2.PASSWORD, JMSConsumer2.BROKEURL);
                    
            try {
                connection=connectionFactory.createConnection();  // 通过连接工厂获取连接
                connection.start(); // 启动连接
                session=connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE); // 创建Session
                // destination=session.createQueue("FirstQueue1");  // 创建连接的消息队列
                destination=session.createTopic("FirstTopic1");
                messageConsumer=session.createConsumer(destination); // 创建消息消费者
                messageConsumer.setMessageListener(new Listener2()); // 注册消息监听
            } catch (JMSException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
        }
    }
    
    
    package com.java1234.activemq2;
    
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.MessageListener;
    import javax.jms.TextMessage;
    
    /**
     * 消息监听-订阅者二
     * @author Administrator
     *
     */
    public class Listener2 implements MessageListener{
    
        @Override
        public void onMessage(Message message) {
            // TODO Auto-generated method stub
            try {
                System.out.println("订阅者二收到的消息:"+((TextMessage)message).getText());
            } catch (JMSException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
    }
    View Code
  • 相关阅读:
    算法导论读书笔记(未完成)
    工作心理学(未完成)
    面试疑难点解析
    aop难点解析。
    Mybatis框架解析之Builder解析
    HashMap原理总结
    编程基础的重要性(程序员之路)
    Java HashMap详解
    Java源码分析系列之HttpServletRequest源码分析
    JFinal源码 分析之 Core包分析
  • 原文地址:https://www.cnblogs.com/brant/p/5907576.html
Copyright © 2020-2023  润新知