1.导入依赖
<dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>5.16.2</version> </dependency>
2.消费者代码
package com.example.queueprj.consumer; import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; import java.io.IOException; import static javax.jms.Session.AUTO_ACKNOWLEDGE; /** * 发布/订阅模式 * 注意点:发布/订阅模式和点对点区别:发布/订阅模式下,生产者消息发送成功后,如果此时消费者服务还没启动起来,已经发出去的消息消费者是收不到的。 * 只有在消费者服务启动成功并正常订阅成功后,后续生产者发送的消息才会被消费者接收到 */ public class TopicConsumer { public static void main(String[] args) throws JMSException, IOException { //创建工厂 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616"); //创建连接 Connection connection = connectionFactory.createConnection(); //开启连接 connection.start(); //创建会话 Session session = connection.createSession(false,AUTO_ACKNOWLEDGE); //创建者主题 Topic topic = session.createTopic("test-topic"); //创建消费者 MessageConsumer messageConsumer = session.createConsumer(topic); //消费者增加监听器 messageConsumer.setMessageListener(new MessageListener() { @Override public void onMessage(Message message) { TextMessage textMessage = (TextMessage) message; try { System.out.printf("消息输出 = " + textMessage.getText()); } catch (JMSException e) { e.printStackTrace(); } } }); //增加键盘输入,防止main方法执行完控制台就结束了进程,正常的web无需此操作 System.in.read(); //关闭连接 messageConsumer.close(); session.close(); connection.close(); } }
3.消费者执行结果
4.生产者代码
package com.example.queueprj.producer; import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; import static javax.jms.Session.AUTO_ACKNOWLEDGE; /** * 发布/订阅模式 * 注意点:发布/订阅模式和点对点区别:发布/订阅模式下,生产者消息发送成功后,如果此时消费者服务还没启动起来,已经发出去的消息消费者是收不到的。 * 只有在消费者服务启动成功并正常订阅成功后,后续生产者发送的消息才会被消费者接收到 */ public class TopicProducer { public static void main(String[] args) throws JMSException { //创建工厂 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616"); //创建连接 Connection connection = connectionFactory.createConnection(); //开启连接 connection.start(); //创建会话 Session session = connection.createSession(false,AUTO_ACKNOWLEDGE); //创建者主题 Topic topic = session.createTopic("test-topic"); //创建消息生产者 MessageProducer messageProducer = session.createProducer(topic); //创建消息 TextMessage textMessage = session.createTextMessage("我是消息体"); //发送消息 messageProducer.send(textMessage); //关闭连接 messageProducer.close(); session.close(); connection.close(); System.out.printf("消息发送成功!!!"); } }
5.生产者执行结果
自愿打赏