MQ发布订阅者模式

注意:需先启动订阅者,再启动消费者
发布消息

package com.test.producer;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 *发布订阅模式-- 消息生产者
 */
public class PS_Producer {
    public static void main(String[] args) throws JMSException {
        //1,创建连接工厂
        ConnectionFactory factory
                = new ActiveMQConnectionFactory("tcp://192.168.25.128:61616");
        //2,创建连接
        Connection connection = factory.createConnection();
        //3,打开连接
        connection.start();
        //4,创建session
        /**
         * 参数1:是否开启事务操作
         * 参数2:消息确认机制
         */
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //5,创建目标地址(queue点对点消息,topic发布订阅消息)
        Topic topic = session.createTopic("topic01");
        //6,创建消息生产者
        MessageProducer producer = session.createProducer(topic);
        //7,创建消息
        //createTextMessage文本类型
        TextMessage textMessage = session.createTextMessage("test msg to topic");
        //8,发送消息
        producer.send(textMessage);
        System.out.println("消息发送完成");
        //9,释放资源
        session.close();
        connection.close();
    }
}

订阅消息

package com.test.consumer;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * 发布订阅模式 -- 消息消费者
 */
public class PS_Consumer {
    public static void main(String[] args) throws JMSException {
        //1,创建连接工厂
        ConnectionFactory factory
                = new ActiveMQConnectionFactory("tcp://192.168.25.128:61616");
        //2,创建连接
        Connection connection = factory.createConnection();
        //3,打开连接
        connection.start();
        //4,创建session
        /**
         * 参数1:是否开启事务操作
         * 参数2:消息确认机制
         */
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //5,指定目标地址(queue点对点消息,topic发布订阅消息)
        Topic topic = session.createTopic("topic01");
        //6,创建消息消费者
        MessageConsumer consumer = session.createConsumer(topic);
        //7,设置消息监听器来接收消息
        consumer.setMessageListener(new MessageListener() {
            //处理消息
            public void onMessage(Message message) {
                if (message instanceof TextMessage){
                    TextMessage textMessage = (TextMessage)message;
                    try {
                        System.out.println("接收的消息 from topic: "+textMessage.getText());
                    } catch (JMSException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        //在监听器模式下不要关闭连接,一旦关闭,消息无法接收
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值