首页 > 代码库 > Jms之ActiveMQ

Jms之ActiveMQ

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

安装

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

2》配置环境变量:path:D:\Development Tools\apache-activemq-5.11.1\bin

3》启动测试bin\activemq.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

 

Jms之ActiveMQ