php发展

首页 » 常识 » 诊断 » 消息队列系列1如何选型
TUhjnbcbe - 2021/6/29 18:58:00

初步介绍了Kafka、RabbitMQ、RocketMQ和ActiveMQ4种消息队列的优缺点,并进行了简单的对比。

这个系列计划会更新5-6篇文章,前面介绍常用消息队列的初步原理,后面会选一种消息队列,重点介绍环境搭建和实战部分,文章内容大部分是整理的网上资料,并加入自己的理解,主要便于以后技术选型。(这些资料,从查阅到整理,花了近一个月时间,整理不易,请多多点赞)

1.1消息队列模式

消息队列目前主要2种模式,分别为“点对点模式”和“发布/订阅模式”。

1.1.1点对点模式

一个具体的消息只能由一个消费者消费。多个生产者可以向同一个消息队列发送消息;但是,一个消息在被一个消息者处理的时候,这个消息在队列上会被锁住或者被移除并且其他消费者无法处理该消息。需要额外注意的是,如果消费者处理一个消息失败了,消息系统一般会把这个消息放回队列,这样其他消费者可以继续处理。

1.1.2发布/订阅模式

单个消息可以被多个订阅者并发的获取和处理。一般来说,订阅有两种类型:临时(ephemeral)订阅,这种订阅只有在消费者启动并且运行的时候才存在。一旦消费者退出,相应的订阅以及尚未处理的消息就会丢失。持久(durable)订阅,这种订阅会一直存在,除非主动去删除。消费者退出后,消息系统会继续维护该订阅,并且后续消息可以被继续处理。

1.2衡量标准

对消息队列进行技术选型时,需要通过以下指标衡量你所选择的消息队列,是否可以满足你的需求:

消息顺序:发送到队列的消息,消费时是否可以保证消费的顺序,比如A先下单,B后下单,应该是A先去扣库存,B再去扣,顺序不能反。消息路由:根据路由规则,只订阅匹配路由规则的消息,比如有A/B两者规则的消息,消费者可以只订阅A消息,B消息不会消费。消息可靠性:是否会存在丢消息的情况,比如有A/B两个消息,最后只有B消息能消费,A消息丢失。消息时序:主要包括“消息存活时间”和“延迟/预定的消息”,“消息存活时间”表示生产者可以对消息设置TTL,如果超过该TTL,消息会自动消失;“延迟/预定的消息”指的是可以延迟或者预订消费消息,比如延时5分钟,那么消息会5分钟后才能让消费者消费,时间未到的话,是不能消费的。消息留存:消息消费成功后,是否还会继续保留在消息队列。容错性:当一条消息消费失败后,是否有一些机制,保证这条消息是一种能成功,比如异步第三方退款消息,需要保证这条消息消费掉,才能确定给用户退款成功,所以必须保证这条消息消费成功的准确性。伸缩:当消息队列性能有问题,比如消费太慢,是否可以快速支持库容;当消费队列过多,浪费系统资源,是否可以支持缩容。吞吐量:支持的最高并发数。

1.3消息队列比较

下图是从网上摘抄过来的,可以看到主流MQ的对比:

下面简单介绍常用的消息队列:

Kafka:ApacheKafka它最初由LinkedIn公司基于独特的设计实现为一个分布式的提交日志系统(adistributed
1
查看完整版本: 消息队列系列1如何选型