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 多了效率就不行了。