apache-activemq(三)

来源:互联网 发布:音悦台点歌机加歌软件 编辑:程序博客网 时间:2024/05/29 10:41

    使用第二种方式接收消息—注册监听器
首先建立一个class, 这个class 必须实现 MessageListener接口.

package com.zero.activemq;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.MessageListener;import javax.jms.TextMessage;/** * 实现messageListener接口 * @author samuel * */public class Listener1 implements MessageListener {    /**     * 传输的消息     */    public void onMessage(Message message) {        try {            if (message instanceof TextMessage) {                  TextMessage txtMsg = (TextMessage) message;                  String msg = txtMsg.getText();                  System.out.println("Received: " + msg);              } else {                System.out.println("this is error");            }        } catch (JMSException e) {            e.printStackTrace();        }    }}

    其次创建消费者类, 该类和第一种消费者类基本上是一样的, 不同的地方就是在接收消息的方式上不同.

package com.zero.activemq;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;/** * 创建消息并发送消息 *  * 测试失败  没有找出问题在哪里 * @author samuel * */public class ActiveConsumer2 {    // 系统默认的 用户名称  用户密码  连接地址    private static final String USER_NAME = ActiveMQConnection.DEFAULT_USER;    private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;    private static final String BROKE_URL = ActiveMQConnection.DEFAULT_BROKER_URL;    public void run() {        ConnectionFactory connectionFactory = null;        Connection connection = null;        Session session;        Destination destination;        MessageConsumer messageConsumer;        try {            // 实例化activemq的工厂            connectionFactory = new ActiveMQConnectionFactory(USER_NAME, PASSWORD, BROKE_URL);            // 使用对象工厂创建连接对象            connection = connectionFactory.createConnection();            connection.start();            // 使用连接对象创建Session            /*             *  @parms true:  true 开始session服务  false  不需要session             *  @parms Session.AUTO_ACKNOWLEDGE 自动接收消息  有四种类似             */            session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);            // 创建消息队列            destination = session.createQueue("firstQueue");            // 创建消息消费者            messageConsumer = session.createConsumer(destination);            // 设置监听器接收消息            messageConsumer.setMessageListener(new Listener1());            /**            *   对比第一种的接收消息方式            */            /*            while (true) {                // 这个时间但是是 毫秒                TextMessage textMessage = (TextMessage) messageConsumer.receive(100000);                if(null != textMessage) {                    System.out.println(textMessage.getText());                } else {                    System.out.println("111111");                }                       }*/         }catch (Exception e) {            e.printStackTrace();        }finally {            // /****一定不能 connection.close()****/        }       }    public static void main(String[] args) {        new ActiveConsumer2().run();    }   }

注意点:
     使用注册监听器的方式 一定不能关闭connection对象. 否则就接收不到消息

0 0
原创粉丝点击