MQ-信息队列中点对点模型与分析/订阅方式的区别版权声明

原创
小哥 3年前 (2022-10-28) 阅读数 6 #大杂烩

背景知识

JMS一个在 Java标准化组织(JCP)在标准(代码。JSR 914)。2001年6月25日,Java消息服务发布JMS 1.0.2b,2002年3月18日Java消息服务发布 1.1.
Java消息服务(Java Message Service,JMS应用程序接口是一个Java该平台是关于面向消息的中间件(MOM)的API,用于在两个应用程序之间或在分布式系统中发送消息以进行异步通信。
最初是进行点对点订阅和发布订阅JMS已定义。这两种模式或解决的问题之间的主要区别是发送到队列的消息是否可以重复消费。(多订阅)

1.JMS中定义

JMS该规范目前支持两种消息模型:点对点(point to point, queue)和发布/订阅(publish/subscribe,topic)。
点对点:
消息生成器生成发送的消息。queue,然后消息消费者来自。queue拿出并消费这条消息。此处请注意:
在新闻被消费之后,queue中没有存储,因此消息消费者不可能消费已经被消费的消息。
Queue支持存在多个消费者,但对于一条消息,只能有一个消费者可以消费。
发布/订阅
消息生产者(发布)发布消息。topic在中,多个消息使用者(订阅)同时使用消息。不同于点对点的方式,发布。topic该消息将被所有订阅者使用。

2.对二者的辨析与区分

2.1 点对点模式


制片人发出了一条信息queue只有一个消费者可以收到它。

2.2 发布订阅模型


出版商已发送topic邮件数量,仅订阅topic订阅者将收到该消息。

小结

queue实现了负载均衡,一条消息只能被一个消费者接受,当没有消费者可用时,消息被保存到有消费者可用。 一个可用的消费者,一个queue可以有多个消费者,在他们之间实现负载均衡,
所以Queue实现了可靠的负载均衡。
topic实现了发布和订阅,当你发布一条消息时,都订阅了这个。topic该服务可以获得这一消息,所以从。1到N订户可以获得该消息的副本,
只有在消息代理收到消息时具有有效订阅的订阅方才能获得该消息的副本。

疑问

发布订阅模型下,能否实现订阅者负载均衡消费呢?当发布者消息量很大时,显然单个订阅者的处理能力是不足的。实际上现实场景中是多个订阅者节点组成一个订阅组负载均衡消费topic该消息是群订阅,
这使得订户很容易线性地扩大他们的购买力。

3 比较流行消息队列的消息模型。

传统企业消息队列ActiveMQ遵循了JMS规范,实现对等和发布订阅模型,但其他流行的消息队列RabbitMQ、Kafka它不会跟随年龄的增长。JMS规范,通过什么方式实现消费负载均衡、多订阅?

3.1 RabbitMQ

RabbitMQ实现了AQMP协议,AQMP该协议定义了消息的路由规则和方法。生产端通过路由规则将消息发送给不同的人。queue,消费者端根据queue名称消费消息。此外RabbitMQ向消费端推送消息,服务端保存订阅关系和消费状态。

生产端发送消息到Queue,只有一个消费者可以消费。

当RabbitMQ当需要支持多个订阅时,发布者发送的消息将被路由到多个Queue,不同的订阅组使用此消息。
RabbitMQ内存队列和持久队列都受支持。消费者端是一种推送模式。消费者状态和订阅关系由服务器端维护。消息在消费后立即删除,没有历史消息。因此,当支持多订阅时,会制作消息的多个副本。

3.2 Kafka


Kafka仅支持消息持久化。消费者端是拉动型的。消费者状态和订阅关系由客户端维护。消息消费后不会立即删除,保留历史消息。因此,当支持多订阅时,只存储一条消息。

消息队列中的对等订阅和发布订阅之间的区别。

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除