activemq 客户端topic

topic生产者代码

package mq;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

public class TopicPro {

    public static final String ACTIVE_URL = "tcp://192.168.221.132:61616";
    public static final String TOPIC = "topic";

    public static void main(String[] args) throws Exception {
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVE_URL);
        Connection connection = activeMQConnectionFactory.createConnection();
        connection.start();
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Topic topic = session.createTopic(TOPIC);
        MessageProducer producer = session.createProducer(topic);
        for (int i = 1; i <=6; i++) {
            TextMessage textMessage = session.createTextMessage();
            textMessage.setText("topic msg:"+i);
            producer.send(textMessage);

        }
        producer.close();
        session.close();
        connection.close();

        System.out.println("topic 创建完成");
    }
}

topic 消费者代码

package mq;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

public class TopicCon {

    public static final String ACTIVE_UEL = "tcp://192.168.221.132:61616";
    public static final String TOPIC = "topic";

    public static void main(String[] args) throws Exception {
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVE_UEL);
        Connection connection = activeMQConnectionFactory.createConnection();
        connection.start();
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Topic topic = session.createTopic(TOPIC);
        MessageConsumer consumer = session.createConsumer(topic);
        consumer.setMessageListener((x)->{
            if (x instanceof TextMessage) {
                TextMessage tm = (TextMessage) x;
                try {
                    String text = tm.getText();
                    System.out.println("text = " + text);
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });

        System.in.read();
    }
}

1️⃣其实topic和queue的生产者的区别就是它本身,是个容器,创建生产者的时候,我们传入的容器变了。没别的了
2️⃣我们先启动3个消费者,然后我们启动生产者,会有什么样的结果
三个消费者都是相同的。也就是出队列的信息,翻倍了。
3️⃣我们必须先启动消费者,也就是订阅,就像订报纸。你不订,就没你的。

queue和topic的区别

他们针对的都是消息,是一个消息可以被消费一次,还是一个消息,可以被很多人一起消费,就像发报纸,复印多分,发出去。
1️⃣queue 是生产一个消息,只能被消费一次 topic 前边相同,后边是多次。

2️⃣queue 如果没有消费者,也没关系, topic 没有消息就废了
3️⃣queue的效率不会变太多。topic 多了效率就不行了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值