ActiveMQ点对点的发送和接收

最近在工作中用到了ActiveMQ的点对点模式,在此用一个范例简单描述下使用过程。

1.首先在工程导入ActiveMQ的jar包,此jar包在下载的ActiveMQ资源里,这里用的是ActiveMQ版本是5.9。

 

2.编写消息发送者

package com.cool.jms;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 *  消息生产者
 * Created by hejin on 2017/4/12 0012.
 */
public class JMSProducer {

    //默认连接用户名
    private static final String USER= ActiveMQConnection.DEFAULT_USER;
    //默认连接密码
    private static final String PASSWORD=ActiveMQConnection.DEFAULT_PASSWORD;
    //默认连接地址
    private static final String URL=ActiveMQConnection.DEFAULT_BROKER_URL;
    //发送的消息数量
    private static final int SENDNUM=10;

    public static void main(String[] args) throws JMSException {
        //连接工厂
        ConnectionFactory connectionFactory;
        //连接
        Connection connection;
        //会话(接收或发送消息的线程)
        Session session;
        //消息目的地
        Destination destination;
        //消息生产者
        MessageProducer messageProducer;
        //实例化连接工厂
        connectionFactory=new ActiveMQConnectionFactory(JMSProducer.USER,JMSProducer.PASSWORD,JMSProducer.URL);


        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();
        }
    }


    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);
        }
    }
}

  

执行上面的代码控制台输出

在浏览器访问MQ的页面:http://127.0.0.1:8161/admin/queues.jsp,可以查看发送的队列的消息信息。

消息详情:

 

3.编写消费package com.cool.jms;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * Created by hejin on 2017/4/12 0012.
 */
public class JMSConsumer {
    //默认连接名称
    private static  String USER= ActiveMQConnection.DEFAULT_USER;
    //默认密码
    private static  String PASSWORD=ActiveMQConnection.DEFAULT_PASSWORD;
    //默认连接地址
    private static String URL=ActiveMQConnection.DEFAULT_BROKER_URL;

    public static void main(String[] args) {
       //连接工厂
        ConnectionFactory connectionFactory;
        //连接
        Connection connection;
        //会话 接收或发送消息的进程
        Session session;
        //消息的目的地
        Destination destination;
        //消息的消费者
        MessageConsumer messageConsumer;

        //实例化连接工厂
        connectionFactory=new ActiveMQConnectionFactory(JMSConsumer.USER,JMSConsumer.PASSWORD,JMSConsumer.URL);

        //IDEA快速捕获异常快捷键:Ctrl+Alt+T
        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 message = (TextMessage) messageConsumer.receive(100000);
                if(message!=null){
                    System.out.println("收到的消息:"+message.getText());
                }else{
                    break;
                }
            }
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
}

控制台输出:


posted @ 2017-04-21 14:36  Againn  阅读(2284)  评论(0编辑  收藏  举报