activeMQ 队列模式和主题订阅者模式

引入jar包

  <dependency>
                <groupId>org.apache.activemq</groupId>
                <artifactId>activemq-all</artifactId>
                <version>5.9.0</version>
   </dependency>

1.队列模式:

package com.jackrain.nea.cp.mqdemo;
import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;
/**
 * @Author: wangqiang
 * @Date: 2019/1/28 11:47
 * @Version 1.0
 * 消息生产者
 */
public class QueueProducer {
    // activemq服务器的url地址,默认通信端口为61616
    private static final String URL = "tcp://localhost:61616";
    // 队列的名称
    private static final String QUEUE_NAME = "wangqiang";

    public static void main(String[] args) throws JMSException {
        // 1.创建连接工厂对象(ConnectionFactory)
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("wangqiang","wangqiang",URL);

        // 2.创建连接对象(Connection)
        Connection connection = connectionFactory.createConnection();

        // 3.启动连接
        connection.start();

        // 4.创建session会话,第一参数表示启用事务处理,第二个参数表示启动哪种应答模式,这里启用的是自动应答
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

        // 5.创建目的地(destination)
        Destination destination = session.createQueue(QUEUE_NAME);

        // 6.创建生产者
        MessageProducer producer = session.createProducer(destination);

        
            // 7.创建消息,这里创建的是简单的文本消息体
            TextMessage textMessage = session.createTextMessage("新年快乐");
            // 8.使用消息生产者往目的地发送消息
            producer.send(destination, textMessage);

            System.out.println("消息发送成功:" + textMessage.getText());


        // 9.关闭连接
        connection.close();
    }
}
package com.jackrain.nea.cp.mqdemo;
import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;
/**
 * @Author: wangqiang
 * @Date: 2019/1/28 13:34
 * @Version 1.0
 * 消息消费者
 */
public class QueueConsumer {
    private static final String QUEUE_NAME = "wangqiang";

    public static void main(String[] args) throws Exception {
        // 1.创建一个连接工厂
        ConnectionFactory factory = new ActiveMQConnectionFactory("wangqiang","wangqiang","tcp://localhost:61616");
        // 2.使用工厂创建Connection
        Connection connection = factory.createConnection();
        // 3.开启连接
        connection.start();
        // 4.创建一个Session
        // 第一个参数:是否开启事务(一般不开启),如果开启事务,第二个参数无意义
        // 第二个参数:应答模式(自动/手动)
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 5.通过Session创建一个Destination对象,两种形式:queue、topic
        Queue queue = session.createQueue(QUEUE_NAME);
        // 6.通过Session创建一个Consumer对象
        MessageConsumer consumer = session.createConsumer(queue);
        // 7.接收消息
        consumer.setMessageListener(new MessageListener() {

            @Override
            public void onMessage(Message message) {
                // 8.处理消息
                TextMessage textMessage = (TextMessage)message;
                try {
                    System.out.println(textMessage.getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });
        //为了正常测试,此处使用阻塞,使监听器能持续监听消息
        System.in.read();
        // 9.关闭资源
        consumer.close();
        session.close();
        connection.close();
    }

}

运行消息生产者:

运行消息消费者:

 

 访问:http://localhost:8161/admin/queues.jsp

主题订阅模式:

package com.jackrain.nea.cp.mqdemo;
import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * @Author: wangqiang
 * @Date: 2019/1/28 11:47
 * @Version 1.0
 * 消息生产者
 */
public class TopicProducer {
    // activemq服务器的url地址,默认通信端口为61616
    private static final String URL = "tcp://localhost:61616";
    // 队列的名称
    private static final String TOPIC_NAME = "wangqiang";

    public static void main(String[] args) throws JMSException {
        // 1.创建连接工厂对象(ConnectionFactory)
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("wangqiang","wangqiang",URL);

        // 2.创建连接对象(Connection)
        Connection connection = connectionFactory.createConnection();

        // 3.启动连接
        connection.start();

        // 4.创建session会话,第一参数表示启用事务处理,第二个参数表示启动哪种应答模式,这里启用的是自动应答
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

        // 5.创建目的地(destination)
        Topic topic  = session.createTopic(TOPIC_NAME);

        // 6.创建生产者
        MessageProducer producer = session.createProducer(topic);

            // 7.创建消息,这里创建的是简单的文本消息体
            TextMessage textMessage = session.createTextMessage("孙海涛是个大帅哥");
            // 8.使用消息生产者往目的地发送消息
            producer.send(topic, textMessage);

            System.out.println("消息发送成功:" + textMessage.getText());


        // 9.关闭连接
        connection.close();
    }
}
package com.jackrain.nea.cp.mqdemo;
import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * @Author: wangqiang
 * @Date: 2019/1/28 13:34
 * @Version 1.0
 * 消息消费者1
 */
public class TopicConsumer1 {
    private static final String TOPIC_NAME  = "wangqiang";

    public static void main(String[] args) throws Exception {
        // 1.创建一个连接工厂
        ConnectionFactory factory = new ActiveMQConnectionFactory("wangqiang","wangqiang","tcp://localhost:61616");
        // 2.使用工厂创建Connection
        Connection connection = factory.createConnection();
        // 3.开启连接
        connection.start();
        // 4.创建一个Session
        // 第一个参数:是否开启事务(一般不开启),如果开启事务,第二个参数无意义
        // 第二个参数:应答模式(自动/手动)
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 5.通过Session创建一个Destination对象,两种形式:queue、topic
        Topic topic = session.createTopic(TOPIC_NAME );
        // 6.通过Session创建一个Consumer对象
        MessageConsumer consumer = session.createConsumer(topic);
        // 7.接收消息
        consumer.setMessageListener(new MessageListener() {

            @Override
            public void onMessage(Message message) {
                // 8.处理消息
                TextMessage textMessage = (TextMessage)message;
                try {
                    System.out.println("订阅者模式-消费者1已经启动");
                    System.out.println(textMessage.getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });
        //为了正常测试,此处使用阻塞,使监听器能持续监听消息
        System.in.read();
        // 9.关闭资源
        consumer.close();
        session.close();
        connection.close();
    }

}
package com.jackrain.nea.cp.mqdemo;
import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * @Author: wangqiang
 * @Date: 2019/1/28 13:34
 * @Version 1.0
 * 消息消费者2
 */
public class TopicConsumer2 {
    private static final String TOPIC_NAME  = "wangqiang";

    public static void main(String[] args) throws Exception {
        // 1.创建一个连接工厂
        ConnectionFactory factory = new ActiveMQConnectionFactory("wangqiang","wangqiang","tcp://localhost:61616");
        // 2.使用工厂创建Connection
        Connection connection = factory.createConnection();
        // 3.开启连接
        connection.start();
        // 4.创建一个Session
        // 第一个参数:是否开启事务(一般不开启),如果开启事务,第二个参数无意义
        // 第二个参数:应答模式(自动/手动)
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 5.通过Session创建一个Destination对象,两种形式:queue、topic
        Topic topic = session.createTopic(TOPIC_NAME );
        // 6.通过Session创建一个Consumer对象
        MessageConsumer consumer = session.createConsumer(topic);
        // 7.接收消息
        consumer.setMessageListener(new MessageListener() {

            @Override
            public void onMessage(Message message) {
                // 8.处理消息
                TextMessage textMessage = (TextMessage)message;
                try {
                    System.out.println("订阅者模式-消费者2已经启动");
                    System.out.println(textMessage.getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });
        //为了正常测试,此处使用阻塞,使监听器能持续监听消息
        System.in.read();
        // 9.关闭资源
        consumer.close();
        session.close();
        connection.close();
    }

}

先运行消息订阅者,在运行消息生产者:

 

 

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值