ActiveMQ的发布、订阅消息(主题模式)
1)发布/订阅消息传递域的特点
2)发布主题生产者
public class JmsProduce_Topic { public static final String ACTIVEMQ_URL = "tcp://192.168.2.180:61616"; public static final String TOPIC_NAME ="topic_atguigu"; public static void main(String[] args) throws JMSException { //1、创建连接工厂 ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL); //2、通过连接工程获取connection Connection connection = activeMQConnectionFactory.createConnection(); connection.start(); //3、创建会话 //两个参数 1:事务 2:签收 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); //4、创建目的地 Topic topic = session.createTopic(TOPIC_NAME); //5、创建消息的生产者 MessageProducer messageProducer = session.createProducer(topic); //6、使用消息生产者生产3条消息发送到MQ的队列里面 for(int i=1;i<=3;i++){ //7、创建消息 TextMessage textMessage = session.createTextMessage("TOPIC_MESSAGE" + i); //8、通过messageProducer发送给mq messageProducer.send(textMessage); } //9、释放资源 messageProducer.close(); session.close(); connection.close(); System.out.println("TOPIC_MESSAGE 消息发送到MQ成功!!!"); } }
3)订阅消息消费者
/** * @Description: 发布/订阅的消息消费者 * @author houChen * @date 2020/7/13 14:32 */ public class JmsConsumer_Topic { public static final String ACTIVEMQ_URL = "tcp://192.168.2.180:61616"; public static final String TOPIC_NAME ="topic_atguigu"; public static void main(String[] args) throws JMSException, IOException { System.out.println("我是1号消费者"); //1、创建连接工厂 ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL); //2、通过连接工程获取connection Connection connection = activeMQConnectionFactory.createConnection(); connection.start(); //3、创建会话 //两个参数 1:事务 2:签收 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); //4、创建目的地 Topic topic = session.createTopic(TOPIC_NAME); //5、创建消息的消费者 MessageConsumer messageConsumer = session.createConsumer(topic); // 通过监听的方式来接收消息 ===》 有消息就进行消费,没有消息则继续等待 messageConsumer.setMessageListener(new MessageListener() { @Override public void onMessage(Message message) { if(null!=message&&message instanceof TextMessage){ TextMessage textMessage=(TextMessage)message; try { System.out.println("消费者接收到消息:"+ textMessage.getText()); } catch (JMSException e) { e.printStackTrace(); } } } }); System.in.read(); // 等待 监听器进行监听 messageConsumer.close(); session.close(); connection.close(); System.out.println("消息消费成功!!!"); } }
4)先启动订阅,在启动生产,不然发送的消息为费消息
(idea对一个类运行两次的自己去百度啦哈)
5)查看结果:
对于生产者发布的3条消息,每个消费者都收到3条消息
分类:
|--- ActiveMQ
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?