消息队列入门

RocketMQ是一款开源免费的消息队列项目,由阿里开发,经受了双十一高并发大流量的考验,是一款相对成熟的产品。现已被阿里贡献给了Apache,由Apache维护。

常见的消息队列产品有ActiveMQ、RibbitMQ、RocketMQ、Kafka。
ActiveMQ是资历最老,在消息队列使用初期最多公司使用,也是最成熟的产品,但目前大多数公司因为各种原因已不再使用。
RibbitMQ开发语言是Erlang,因为会Erlang语言的人不多,所以自定义扩展性不是很好,主要由社区维护。但是它执行速度最快,使用的公司也不在少数。
RocketMQ本事就是JAVA写的,所以对于JAVA开发者来说最友好,阅读源码方便和扩展性极佳。也是基于分布式开发的,而且性能相比较来说也很快。
Kafka专注于大数据领域,在所有消息队列产品中对分布式的处理速度最快。但是它不支持消息的失败重试。

1.为什么要学习消息队列以及消息队列给我们带来了哪些好处?

消息队列主要用来项目的解耦、削峰、异步。

解耦:比如现在有三个子系统都要去调用主业务系统的服务,那么主业务系统就得分别为三个子系统写相应的接口服务,而三个子系统也得写调用主业务服务的接口。

 如果哪天又多加了个D系统,又或者C系统被弃用了,那么主业务又得为D系统添加相应的服务,并把C系统的服务给删掉。

 这时候,系统间的服务调用就变得很繁琐了,有没有统一管理服务的方法呢?有的,就是消息队列!!

 主业务系统将服务写到消息队列中,子系统自己去获取自己想要的服务。主系统再也不用管理哪个系统要哪个系统不要服务这种繁琐的事情了。以此完成了系统间的解耦。

削峰:比如像某个购物网站,平时流量之后几百QPS,突然搞了个双11秒杀活动,qps可能在5000QPS左右,而数据库用的Mysql,Mysql的QPS极限大约在2000左右,那么在这么高并发的场景下,大量的请求很可能一瞬间将Mysql服务崩溃,那么整个项目的所有服务都将无法正常进行。虽然可以用提升服务器的软硬件资源或者集群部署(氪金)来抗住5000QPS大流量,但是一年可能就一次双11,为了某一个时间段来付出如此大的代价,从利益的角度来算这是不划算的。而且具体流量的多少是不确定的,有可能是10W或者100W呢?仅仅靠升级扩展是无法把控住的。消息队列的出现也是为了解决我们这一问题。

 所有的请求像排队一样依次请求数据库,这样让数据库在极限范围内处理用户的请求。

异步:消息队列的机制是异步的发消息和接收消息。并不会造成程序的阻塞。消息生产者没发送一个消息,消息消费者就会去获取这个消息。

原文地址:https://www.cnblogs.com/dagger9527/p/11833770.html