ActiveMQ学习笔记(三)—— 持久主题订阅

持久主题订阅

前面说道,如果消费者没有先启动,生产者就发送了消息,这些消息消费者永远都不会收到,这样接收消息的方式被称为非持久主题订阅。下面我们来介绍另外一种消息接收方式,持久主题订阅

消费者订阅主题

这里我们还是先启动消费者,创建持久订阅,相当于在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();
					}
				}
			}
		});*/
	}

生产者保持代码不变,现在我们把消费者停掉

 现在我们启动生产者,发送一条消息

我们再次把消费者启动起来

 

发布了64 篇原创文章 · 获赞 0 · 访问量 3214

猜你喜欢

转载自blog.csdn.net/q42368773/article/details/103040293