持久主题订阅
前面说道,如果消费者没有先启动,生产者就发送了消息,这些消息消费者永远都不会收到,这样接收消息的方式被称为非持久主题订阅。下面我们来介绍另外一种消息接收方式,持久主题订阅
消费者订阅主题
这里我们还是先启动消费者,创建持久订阅,相当于在MQ服务上注册了一个订阅
public static void main(String[] args) throws JMSException {
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.1.3:61616");
Connection connection = factory.createConnection();
connection.setClientID("02"); //为持久化订阅设置一个ClientID,一个实例对应一个ClientID
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic("topic02");
TopicSubscriber topicSubscriber = session.createDurableSubscriber(topic, "mySubscriber"); //创建持久化订阅,第二个参数为订阅名,随便取
while (true) {
Message message = topicSubscriber.receive(); //接收消息,同MessageConsumer.receive() 一样的使用方式
if(message != null){
TextMessage textMessage = (TextMessage) message;
System.out.println(textMessage.getText());
} else {
break;
}
}
//创建持久化订阅的监听器
/*topicSubscriber.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
if (message != null && message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
try {
System.out.println(textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
});*/
}
生产者保持代码不变,现在我们把消费者停掉
现在我们启动生产者,发送一条消息
我们再次把消费者启动起来