消息中间件ActiveMQ(4)--Publisher/Subscriber实验

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
性能测试 PTS,5000VUM额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介:

博学,切问,近思--詹子知 (https://jameszhan.github.io)


发布/订阅(Publish/Subscribe)模式:发布/订阅功能使消息的分发可以突破目的队列地理指向的限制,使消息按照特定的主题甚至内容进行分发,用户或应用程序可以根据主题或内容接收到所需要的消息。发布/订阅功能使得发送者和接收者之间的耦合关系变得更为松散,发送者不必关心接收者的目的地址,而接收者也不必关心消息的发送地址,而只是根据消息的主题进行消息的收发。在MQ家族产品中,MQ Event Broker是专门用于使用发布/订阅技术进行数据通讯的产品,它支持基于队列和直接基于TCP/IP两种方式的发布和订阅。

在开始编程之前,我们先看一下点对点和发布/订阅接口的关系:

JMS 公共 PTP 域 Pub/Sub 域
ConnectionFactory QueueConnectionFactory TopicConnectionFactory
Connection QueueConnection TopicConnection
Destination Queue Topic
Session QueueSession TopicSession
MessageProducer QueueSender TopicPublisher
MessageConsumer QueueReceiver TopicSubscriber

JMS 1.1 通过统一的域简化了消息传递,在编程中,我们实际上只需要使用JMS公共域编程即可,对于P2P模式和Pub/Sub模式在编程方式上几乎毫无区别。我们再看一下上文提到的那个JMS类关系图:
JMS

按照JMS规范,发布消息的步骤如下:

  1. 从连接工厂中拿出Connecion对象。
  2. 和服务器建立连接(Connection.start())。
  3. 创建会话(Session)对象。
  4. 通过Session,在指定的Topic创建消息发布者(MessageProducer)。
  5. 使用Session创建消息。
  6. 使用消息生产者发布消息。

按照JMS规范,订阅消息的步骤如下:

  1. 从连接工厂中拿出Connecion对象。
  2. 和服务器建立连接(Connection.start())。
  3. 创建会话(Session)对象。
  4. 通过Session,在指定的Topic创建消息订阅者(MessageConsumer)。
  5. 订阅消息:
    • 5.1.调用messageConsumer.receive方法接受消息,如果队列上有消息,则receive方法返回该消息对象,如果队列上无消息,则该方法阻塞。
    • 5.2.也可以以为Session指定MessageListener对象的方式来订阅消息,该方法的好处在于,一旦有新消息到来,会自动触发该对象的onMessage方法执行。
下类描述了以5.1的方式接受消息。 下类描述了以5.2的方式接受消息。

发布/订阅者模式的特点是:

  1. 可以多个发布者对同一个Topic发布消息。
  2. 可以多个订阅者监听同一个Topic。
  3. 消息将被所有的订阅者接收。默认情况下,消息只会发送给所有在线的订阅者,一旦消息发送给了所有在线的订阅者,消息就会从Topic中移除。
  4. 可以特别地为主题创建持久的订阅者,只要消息不被该消费者消费,消息就会一直保留在Topic中,一旦该持久订阅者上线,消息会自动发送给该订阅者。

在文章 消息中间件ActiveMQ(2)--创建连接对象 中,我们介绍了创建连接对象的不同方法,这里我们把这两种方式做一个包装: 创建不同的发布者对同一Topic发送消息。 创建不同的订阅者监听同一Topic。 实验结果如下(注意事项,应先启动订阅者监听Topic,再使用发布者发布消息。):

目录
相关文章
|
2月前
|
消息中间件 网络协议 Java
消息中间件-ActiveMQ
消息中间件-ActiveMQ
|
5月前
|
消息中间件 监控 负载均衡
中间件消息订阅者(Subscriber)
【6月更文挑战第10天】
45 1
|
5月前
|
消息中间件 存储 监控
中间件消息发布者(Publisher)
【6月更文挑战第10天】
34 1
|
5月前
|
消息中间件 存储 监控
Java一分钟之-ActiveMQ:消息中间件
【6月更文挑战第11天】Apache ActiveMQ是广泛使用的开源消息中间件,支持JMS和多种消息协议。本文介绍了ActiveMQ的基础知识,包括消息队列和主题模型,以及持久化和高可用性配置。同时,提出了三个常见问题:配置不当、消息堆积和网络错误,并给出了相应的解决策略。通过Java示例代码展示了如何使用ActiveMQ发送和接收消息。正确配置、管理消息处理和持续监控是确保ActiveMQ高效运行的关键。
148 2
|
4月前
|
消息中间件 NoSQL Kafka
消息中间件(RocketMQ、RabbitMQ、ActiveMQ、Redis、kafka、ZeroMQ)以及之间的区别
消息中间件(RocketMQ、RabbitMQ、ActiveMQ、Redis、kafka、ZeroMQ)以及之间的区别
|
消息中间件 Java Maven
消息中间件系列教程(03) -ActiveMQ -点对点&发布订阅模式
消息中间件系列教程(03) -ActiveMQ -点对点&发布订阅模式
95 0
|
消息中间件 Java Linux
消息中间件系列教程(02) -ActiveMQ -安装&入门案例
消息中间件系列教程(02) -ActiveMQ -安装&入门案例
60 0
|
Web App开发 开发框架 Java
java程序设计与j2ee中间件技术/软件开发技术(III)-实验四-编写简单的jsp页面
java程序设计与j2ee中间件技术/软件开发技术(III)-实验四-编写简单的jsp页面
192 5
java程序设计与j2ee中间件技术/软件开发技术(III)-实验四-编写简单的jsp页面
|
开发框架 Java 中间件
java程序设计与j2ee中间件技术/软件开发技术(I)-实验三-接口、开闭原则和异常
java程序设计与j2ee中间件技术/软件开发技术(I)-实验三-接口、开闭原则和异常
224 2
java程序设计与j2ee中间件技术/软件开发技术(I)-实验三-接口、开闭原则和异常
|
开发框架 Java 中间件
java程序设计与j2ee中间件技术/软件开发技术(I)-实验一-你好世界
java程序设计与j2ee中间件技术/软件开发技术(I)-实验一-你好世界
192 3
java程序设计与j2ee中间件技术/软件开发技术(I)-实验一-你好世界