消息队列中间件——ActiveMQ入门程序

一.消息队列方式入门

1. 在父工程的pom.xml文件中引入ActiveMQ和Spring整合JMS的坐标依赖(项目中已经引入)

 <!-- activemq start -->
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-all</artifactId>
        <version>5.2.0</version>
    </dependency>

    <!-- activemq end -->

    <!-- spring 与 mq整合 start -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jms</artifactId>
        <version>4.2.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.apache.xbean</groupId>
        <artifactId>xbean-spring</artifactId>
        <version>3.7</version>
    </dependency>
    <!-- spring 与 mq整合 end -->

2. ActiveMQ的向消息队列中发送消息的入门程序(没有使用Spring整合JMS的方式)

* 具体的代码如下
        @Test
        public void run1() throws Exception{
            // 创建连接工厂
            ConnectionFactory factory = new ActiveMQConnectionFactory();
            // 使用工厂,创建连接
            Connection connection = factory.createConnection();
            // 启动连接
            connection.start();
            // 使用连接,创建会话,true表示开始事务,代码执行后需要提供事务
            Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
            // 创建队列队形
            Queue queue = session.createQueue("hello");
            // 创建生产者
            MessageProducer producer = session.createProducer(queue);
            // 创建消息
            TextMessage message = session.createTextMessage("美美");
            // 发送消息
            producer.send(message);
            // 提交事务
            session.commit();
            session.close();
            connection.close();
        }

3. ActiveMQ从消息队列中获取消息

  * 具体的代码如下
        @Test
        public void run2() throws Exception{
            // 创建连接工厂
            ConnectionFactory factory = new ActiveMQConnectionFactory();
            // 使用工厂,创建连接
            Connection connection = factory.createConnection();
            // 启动连接
            connection.start();
            // 使用连接,创建会话,true表示开始事务,代码执行后需要提供事务
            Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
            // 创建队列队形
            Queue queue = session.createQueue("hello");

            // 创建消费者
            MessageConsumer consumer = session.createConsumer(queue);
            // 接收消息
            TextMessage message = (TextMessage)consumer.receive();

            System.out.println(message.getText());
            // 提交事务
            session.commit();
            session.close();
            connection.close();
        }

4. 使用监听器的方式,从队列中消费消息

 /**
     * 使用监听器的方式消费消息
     * @throws Exception
     */
    @Test
    public void run3() throws Exception{
        // 创建连接工厂
        ConnectionFactory factory = new ActiveMQConnectionFactory();
        // 使用工厂,创建连接
        Connection connection = factory.createConnection();
        // 启动连接
        connection.start();
        // 使用连接,创建会话,true表示开始事务,代码执行后需要提供事务
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 创建队列队形
        Queue queue = session.createQueue("hello");
        // 创建消费者
        MessageConsumer consumer = session.createConsumer(queue);
        // 给消费者添加监听器
        consumer.setMessageListener(new MessageListener() {
            public void onMessage(Message msg) {
                TextMessage message = (TextMessage) msg;
                try {
                    System.out.println(message.getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });
        while(true){}

        // 使用监听器的方式不能关闭,需要监听器一直工作
        // session.commit();
        // session.close();
        // connection.close();
    }

二.消息订阅方式入门 

1. 发送消息的入门程序

 /**
     * 订阅方式发送消息
     * @throws Exception
     */
    @Test
    public void run4() throws Exception{
        // 创建连接工厂
        ConnectionFactory factory = new ActiveMQConnectionFactory();
        // 使用工厂,创建连接
        Connection connection = factory.createConnection();
        // 启动连接
        connection.start();
        // 使用连接,创建会话,true表示开始事务,代码执行后需要提供事务
        Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        // 创建消息订阅
        Topic topic = session.createTopic("helloTopic");
        // 创建生产者
        MessageProducer producer = session.createProducer(topic);
        // 创建消息,一组可以存储key value的消息
        MapMessage message = session.createMapMessage();
        message.setString("phone", "119");
        message.setString("code", "123456");
        // 发送消息
        producer.send(message);
        // 提交事务
        session.commit();
        session.close();
        connection.close();
    }

2. 消费者的代码如下


    /**
     * 消费者
     * @throws Exception
     */
    @Test
    public void run5() throws Exception{
        // 创建连接工厂
        ConnectionFactory factory = new ActiveMQConnectionFactory();
        // 使用工厂,创建连接
        Connection connection = factory.createConnection();
        // 启动连接
        connection.start();
        // 使用连接,创建会话,true表示开始事务,代码执行后需要提供事务
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 创建消息订阅
        Topic topic = session.createTopic("helloTopic");
        // 创建消费者
        MessageConsumer consumer = session.createConsumer(topic);

        // 设置监听器
        consumer.setMessageListener(new MessageListener() {
            public void onMessage(Message msg) {
                MapMessage message = (MapMessage) msg;
                try {
                    String phone = message.getString("phone");
                    String code = message.getString("code");
                    System.out.println(phone + ":" + code);
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });
        while(true){

        }
    }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值