注意:需先启动订阅者,再启动消费者
发布消息
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();
}
}
}
});
//在监听器模式下不要关闭连接,一旦关闭,消息无法接收
}
}