JMS之——基于ActiveMQ实现简单的消息收发案例

来源:互联网 发布:生死狙击手游刷枪软件 编辑:程序博客网 时间:2024/04/26 13:42

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/68969450

在上一篇博文《JMS之——ActiveMQ的安装和启动》给大家讲解了如何安装和启动ActiveMQ以及简单的介绍了一下ActiveMQ应用场景,那么这篇文章就给大家介绍如何基于ActiveMQ实现简单的消息收发功能。要注意的是,开发时候,要将apache-activemq-5.14.4-bin.tar.gz解压缩后里面的activemq-all-5.14.4.jar包加入到classpath下面,这个包包含了所有jms接口api的实现。

一、编写消息的提供者类JMSProducer

package com.lyz.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 liuyazhuang * */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 String BROKEURL = "tcp://192.168.50.131:61616";    //发送的消息数量    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            session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);            //创建一个名称为HelloWorld的消息队列            destination = session.createQueue("HelloWorld");            //创建消息生产者            messageProducer = session.createProducer(destination);            //发送消息            sendMessage(session, messageProducer);            session.commit();        } catch (Exception e) {            e.printStackTrace();        }finally{            if(connection != null){                try {                    connection.close();                } catch (JMSException e) {                    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);        }    }}

二、编写消息的消费者类JMSConsumer

package com.lyz.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 liuyazhuang * */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;//默认连接地址    private static final String BROKEURL = "tcp://192.168.50.131:61616";    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            session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);            //创建一个连接HelloWorld的消息队列            destination = session.createQueue("HelloWorld");            //创建消息消费者            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) {            e.printStackTrace();        }    }}

三、运行

1、启动ActiveMQ

首先,我们要启动ActiveMQ,具体启动方法,请参见博文《JMS之——ActiveMQ的安装和启动》   

2、运行消息提供者JMSProducer

命令行输出如下:


此时,我们先看一下ActiveMQ服务器,Queues内容如下:

我们可以看到创建了一个名称为HelloWorld的消息队列,队列中有10条消息未被消费,我们也可以通过Browse查看是哪些消息,如下图:


如果这些队列中的消息,被删除,消费者则无法消费

3、运行消息消费者JMSConsumer

我们继续运行一下消费者,eclipse控制台打印消息,如下:

此时,我们先看一下ActiveMQ服务器,Queues内容如下:


我们可以看到HelloWorld的消息队列发生变化,多一个消息者,队列中的10条消息被消费了,点击Browse查看,已经为空了。
点击Active Consumers,我们可以看到这个消费者的详细信息:

至此,基于ActiveMQ实现简单的消息收发案例就结束了,大家可以多多操作来了解ActiveMQ的特性。

四、温馨提示

大家可以到链接http://download.csdn.net/detail/l1028386804/9802824下载完整的基于ActiveMQ实现的简单消息收发案例


1 0
原创粉丝点击