(三)主题和队列的区别

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值