(三)主题和队列的区别

队列:队列是一种先进先出的线性表,它能够严格保证消息的有序性
现在的消息队列大概分为队列模型和订阅模型
队列模型:当多个生产者在队列生产消息,在消费者一端,多个消费者消费消息属于竞争模式,同一时刻只能有一个消费者在消费,并且消费过后则不能重新消费,如果每个消费者都要得到一份全量的数据就必须建立多个队列,一份消息复制到多个队列,给每个消费者一个队列,这样我们就必须知道消费者有多少个,违背的消息队列的解耦原则。
订阅-发布者模式:发布者-主题-订阅者,每个订阅者都能够得到一根全量的数据。
队列模式和发布者模式的最大区别在于:发布者模式的每个消费者能够有一分全量的消息,一分数据能够重复消费。当订阅者只有一个时,则队列和发布模式没有区别。
rabbitMQ消息模式:采用的是队列模式,通过exchange交换机来解决给每个消费者一份全量的数据,生产者不用关心发送到那个队列,将消息发送给交换机,交换机会通过各自策略发送多个队列中,
rocketMQ消息模型: 采用订阅发布者模式。
对于现在大部分的消费机制来说,都采用“消费=确认”的方式来保证系统的可靠性,当消费者处理完相应的业务逻辑,会给队列发送一个消费确认,如果设定时间内没有得到确认,则会重新发送进行消费。由于这种机制,在同一个时刻至多有一个消费者在消费,否则会出现消息空洞,消息的消费顺序会与生产的发送顺序不一致,所以rocketMq引入了队列,一个主题中有多个队列,这样能保证多个消费组并行消费,可以水平扩容消费组内消费者来提高消费效率。消息在队列中可以实现顺序性,在主题层面不能够实现严格的消费顺序,rocketmq订阅者为消费组,消费组之间没有关系,一条消息被一个A消费组消费,同时还能被B消费组消费,通过维护一个消费位置来区分,消费组内对于每条消息的消费是竞争关系,一条消息只能被一个消费者去消费。
kafka:与rocket 模型类似,在kafka中队列叫做分区

RabbitMQ、RocketMQ 和 Kafka 都是当前流行的消息中间件,它们都提供高吞吐量、高可用性和可扩展性的解决方案,但在实现细节和使用场景上有所不同。 下面是它们的区别和联系: 1. 消息模型 RabbitMQ 和 RocketMQ 都是基于 AMQP(高级消息队列协议)的消息中间件,它们采用的是消息队列模型,即生产者将消息发送到队列,消费者从队列中接收消息。而 Kafka 则是基于发布订阅模型的消息中间件,生产者将消息发布到主题(topic)中,消费者通过订阅主题来接收消息。 2. 性能 在性能方面,Kafka 是者中最快的,它能够处理每秒数百万条消息,而 RabbitMQ 和 RocketMQ 的吞吐量则相对较低,但它们也可以满足大多数应用场景的需求。 3. 可靠性 在可靠性方面,者都提供了不同程度的保证。RabbitMQ 和 RocketMQ 都支持持久化消息,在消息发送时将消息持久化到磁盘中,以防止消息丢失。而 Kafka 则是通过副本机制来保证可靠性,它将消息复制到多个副本中,以防止消息丢失。 4. 集群模式 在集群模式方面,者也有所不同。RabbitMQ 和 RocketMQ 都采用主从模式,即主节点负责接收和处理消息,从节点则负责备份数据和故障转移。而 Kafka 则采用分区副本模式,将主题分成多个分区,并将每个分区复制到多个副本中,以实现负载均衡和高可用性。 5. 生态系统 在生态系统方面,者都有丰富的客户端库和工具,以便于开发者使用和管理。RabbitMQ 和 RocketMQ 都有可视化管理工具,可以方便地监控和管理消息队列。而 Kafka 则有更强大的数据处理能力,可以与 Hadoop 生态系统无缝集成。 总的来说,选择哪种消息中间件取决于具体的应用场景和需求。如果需要高性能和可靠性,可以选择 Kafka;如果需要易用性和可扩展性,可以选择 RabbitMQ 或 RocketMQ。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值