06JMS发布/订阅模式

简介: 06JMS发布/订阅模式

消息生产者

public class TopicProducer {
      public static void main(String[] args) throws JMSException {
          //1.创建连接工厂
          ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");
          //2.获取连接
          Connection connection = connectionFactory.createConnection();
          //3.启动连接
          connection.start();
         /*4.获取session  (参数1:是否启动事务,
          参数2:消息确认模式)*/
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         //5.创建主题对象
         Topic topic = session.createTopic("test-topic");
         //6.创建消息生产者
         MessageProducer producer = session.createProducer(topic);
         //7.创建消息
         TextMessage textMessage = session.createTextMessage("欢迎来到MQ世界!");
         //8.发送消息
         producer.send(textMessage);
         //9.关闭资源
         producer.close();
         session.close();
         connection.close();
     }
 }

消息2个消费者(消费者2代码同消费者1)

public class TopicConsumer1 {
      public static void main(String[] args) throws JMSException, IOException {
          //1.创建连接工厂
          ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");
          //2.获取连接
          Connection connection = connectionFactory.createConnection();
          //3.启动连接
          connection.start();
          //4.获取session  (参数1:是否启动事务,参数2:消息确认模式)
         Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
         //5.创建主题对象
         Topic topic = session.createTopic("test-topic");
         //6.创建消息消费者
         MessageConsumer consumer = session.createConsumer(topic);
         //7.监听消息
         consumer.setMessageListener(new MessageListener() {
             @Override
             public void onMessage(Message message) {
                 TextMessage textMessage = (TextMessage) message;
                 try {
                     System.out.println("消费1--接收到消息:"+textMessage.getText());
                 } catch (JMSException e) {
                     e.printStackTrace();
                 }
             }
         });
         //8.等待键盘输入
         System.in.read();
         //9.关闭资源
         consumer.close();
         session.close();
        connection.close();
     }
 }

运行查看测试结果

同时开启2个以上的消费者,再次运行生产者,观察每个消费者控制台的输出,会发现每个消费者会接收到消息。

总结:

发布订阅的模式: 默认的请情况下消息的内容不存在服务器,当生产者发送了一个消息,如果消费者之前没有订阅,就没了。

点对点的方式:默认的请情况下:将消息存储在服务器上,消费者随时来取,但是一旦一个消费者获取到了消息,这个消息就没有了。

目录
相关文章
|
6月前
|
JavaScript 前端开发 API
第二十九章 使用消息订阅发布实现组件通信
第二十九章 使用消息订阅发布实现组件通信
|
1月前
|
设计模式 消息中间件 安全
C# 一分钟浅谈:观察者模式与订阅发布模式
【10月更文挑战第11天】本文介绍了观察者模式和订阅发布模式,这两种设计模式主要用于实现对象间的解耦。观察者模式通过事件和委托实现一个对象状态改变时通知多个依赖对象;订阅发布模式则通过事件聚合器实现发布者与订阅者之间的解耦。文章详细探讨了这两种模式的实现方式、常见问题及避免方法,帮助开发者在实际项目中更好地应用这些模式,提升代码的可维护性和扩展性。
58 1
|
5月前
|
消息中间件 存储 开发工具
消息队列 MQ产品使用合集之C++如何使用Paho MQTT库进行连接、发布和订阅消息
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
5月前
|
存储 负载均衡 安全
中间件消息发布-订阅模式
【6月更文挑战第9天】
114 5
|
5月前
|
消息中间件 存储 监控
中间件消息发布者(Publisher)
【6月更文挑战第10天】
34 1
|
6月前
|
传感器 监控 网络协议
MQTT 发布、订阅模式介绍
【2月更文挑战第17天】
426 6
MQTT 发布、订阅模式介绍
|
6月前
|
消息中间件 Java
RabbitMQ中的消息发布-订阅模式是什么?如何实现?
RabbitMQ中的消息发布-订阅模式是什么?如何实现?
170 0
|
消息中间件 JSON NoSQL
|
消息中间件 传感器 存储
MQTT介绍-发布/订阅模式
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议。
5839 0
EMQ
|
消息中间件 传感器 存储
MQTT 发布/订阅模式介绍
MQTT发布/订阅模式区别于传统的客户端/服务器模式,它使发布者与订阅者分离,发布者与订阅者不需要建立直接联系。
EMQ
1069 0
MQTT 发布/订阅模式介绍