两种消息模型:点对点和发布订阅
1.P2P (点对点)模式
1)核心组件
消息队列(Queue)--消息存放的地方
发送者(Sender)--就是消息生产者
接收者(Receiver)--就是消息消费者
生产者生产的每个消息都被发送到一个特定的队列(queue),消费者从队列中获取消息。队列保留着(未被消费的)消息,直到他们被消费或超时。
2)P2P模式的特点
A. 每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再留在消息队列中)
B. 发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列;同时接受者也不用在线等待发送者发送,只要消息没被消费,随时都可以去取
C. 接收者在成功接收消息之后需向队列应答成功(acknowledge)
3)应用场景
如果你希望发送的每个消息必须且仅被消费一次的话,就可以使用P2P模式。以下举两个例子
A. 用户注册
不用消息队列场景
可以看到,由于发送注册验证邮件是一个比较费时的操作,且与主要注册逻辑无关,也不需要实时响应,所以可以采用消息队列以异步形式进行处理,服务端完成注册信息插入操作后立即返回给客户端,无需等待注册邮件发送完成
B. 秒杀时流量削峰
同样的,秒杀成功后后面还有下单、付款、库存操作、优惠策略、发货等一系列过程,在高并发应用场景下,如果同步处理、响应是不可接受的,而是应该及时向客户端返回秒杀请求结果,然后大量秒杀请求消息进入消息队列随后慢慢处理。
2. Pub/Sub (发布与订阅)
类似于面向对象设计模式中的观察者模式
1)核心组件
主题(Topic)--相当于点对点中的队列,是消息的目的地或称容器
发布者(Publisher)--在特定主题上发布消息
订阅者(Subscriber) --订阅特定主题,接收消息
发布者将消息发送到主题(Topic),系统将这些消息传递给一到多个订阅者。
2)Pub/Sub的特点
A. 每个消息可以有多个消费者
B. 发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,只能接收订阅后发布者发布的消息,不能接收到之前的消息(除非进行持久化订阅)。为了消费消息,订阅者必须保持运行的状态。
3)持久化消息
为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息。
4)应用场景
如果你希望发送的消息可以被多个消费者处理的话,那么可以采用Pub/Sub模型。比如新闻客户端订阅栏目一样,订阅了才给你推送,同样的消息可以推送给所有订阅人
2. 消息的同步和异步消费
对于消息消费来说,不管是P2P还是发布订阅模式,JMS的消费者可以通过同步或异步两种方式来消费消息。
○ 同步
订阅者(发布-订阅模式)或接收者(点对点)调用receive方法来接收消息,receive方法在能够接收到消息之前(或超时之前)将一直阻塞
○ 异步
订阅者或接收者可以注册为一个消息监听器。在消息到来之前接收者或订阅者可以正常做别的事。当消息到达之后,系统自动调用监听器的onMessage方法(相当于事件驱动)
下一篇将介绍ActiveMQ安装和基本配置
相关推荐
ActiveMQ中的Queue和Topic是两种主要的消息类型。Queue实现了负载均衡的点对点(Point-to-Point)语义,确保每条消息仅被一个消费者接收,如果消费者未响应,消息会被转发给其他消费者。而Topic则遵循发布/订阅...
4. **多种消息模式**:支持点对点(Point-to-Point)和发布/订阅(Publish/Subscribe)两种消息传递模型,满足不同应用场景需求。 5. **事务支持**:JMS事务确保消息的一致性和准确性,ActiveMQ支持本地和分布式...
JMS提供两种消息模型:点对点(Point-to-Point, PTP)和发布/订阅(Publish/Subscribe, Pub/Sub)。 - **点对点模型**:消息从一个生产者发送到一个队列,然后由一个或多个消费者接收。每个消息仅被一个消费者消费...
JMS支持两种消息模型:点对点(Queue)和发布/订阅(Topic)。 4. AMQP的兴起和发展: 2006年,Cisco、Red Hat和iMatix共同创建了AMQP,以推动一个统一的消息传输标准。随着时间的推移,AMQP被广泛接受,LinkedIn...
JMS支持两种消息模型:点对点(Queue)和发布/订阅(Topic)。点对点模型中,每个消息只有一个消费者,而发布/订阅模型中,一个消息可以被多个消费者接收。 在ActiveMQ中,你可以创建、管理和监控消息队列和主题。...
JMS提供了两种消息传递模式:点对点(Point-to-Point,P2P)和发布/订阅(Publish/Subscribe,Pub/Sub)。 - **点对点模型**:在这种模式下,消息从一个生产者发送到一个队列,然后由一个或多个消费者从该队列中...
2. **消息模型**:讲解点对点(Queue)和发布/订阅(Topic)两种消息模型,以及它们在不同场景下的应用。 3. **JMS接口**:Java消息服务(JMS)接口的使用,包括创建ConnectionFactory、Session、Producer和...
消息队列和主题是两种消息模式:队列遵循“一对一”模型,每个消息只被一个消费者消费;主题则遵循“一对多”模型,消息可以被多个订阅者同时消费。 在JMS中,有两种主要的消息类型:点对点(Point-to-Point,P2P)...
分布式事务和消息队列在Java开发中是两个非常重要的概念,尤其在构建大规模、高并发、高可用的系统时更是不可或缺。本资料包"Java-25-通用设计-分布式事务-消息队列.rar"主要涵盖了这两个主题,下面将详细阐述它们的...
JMS定义了两种消息模型:点对点(P2P)和发布/订阅(Pub/Sub)。在P2P模型中,每个消息仅被一个消费者接收;而在Pub/Sub模型中,一个消息可以被多个订阅者接收。 8. **实际应用**: JMS常用于企业级应用,例如...
它可以确保消息的可靠传输,支持点对点(队列)和发布/订阅(主题)两种模型。Java应用程序可以通过JMS提供商(如ActiveMQ、RabbitMQ等)来实现消息的发送和接收。 4. **JVM技术**:Java虚拟机(JVM)是Java程序...