RabbitMQ:初识消息队列

由于水平有限,文章中难免会有疏漏的地方,恳请读者评论批评指出!!!

有部分内容是看了朱忠华大佬的《RabbitMQ实战指南》后总结的,推荐!

从本人亲身经历,讲几个使用队列的场景:

一个项目会用到Redis但不见得集成了队列,如果你在做一个小项目或时间比较紧急,使用Redis先来应对一些场景也是不错的选择。

贴两句代码,感兴趣同学可以试试:RabbitMQ:初识消息队列_第1张图片
成长都有一个过程,那时年少(虽然现在我还是小白),讲讲我对队列的初识到深爱的整个过程:

异步特性(提高计算效率)

经过:我初识队列:业务上需要和三方交互,三方有网络消耗速度极慢(大佬惹不起只能委屈自己),没办法业务推着你要学习前进。项目紧,任务重,我们选择了Redis做队列。最终解决了问题。
RabbitMQ:初识消息队列_第2张图片

总结:得到任务放队列后就提示用户【已完成操作】,三方处理速度大概3秒左右,先提示再处理,用户感受是实时的。倘若提示用户【运行中】,三秒后再提示【操作成功】,用户怕是要口吐芬芳了。

可恢复性(短暂持久化数据)

经过:一次由于运维时部署的失误(小公司运维那时也是我),导致「消费者」没在运行,整整一晚上呀,现在想想都怕。第二天发现时是来自用户投诉(当时没有什么监控),一看队列数量几十万了,赶紧修复,用自己加上几个同事电脑连接到线上跑数据,还好最后挽回了损失。
RabbitMQ:初识消息队列_第3张图片

总结:要不是存在队列里,这些实时数据可能再也找不回来了,几十万数据,足以让用户对平台彻底失去信心。现在回想真的是一身冷汗。

异步通信,解偶,可扩展性

经过:业务以前是矩阵打法,创业公司想着先活下来就不错了,各个项目之间绝对独立,眼看公司一步一步还整挺好,部分业务此时需要数据同步。
年前我下决心要搞自己的数据中心,前期对创业公司是比较困难的,很有可能吃力不讨好。这种东西设计很耗时,又不会有看得见摸得着的东西出来,很长一段时间都是各种纸上谈兵,代码实验设计,每次开会一问进度永远都是设计中也不太合适,在小公司推进基本上要牺牲点个人时间的,不然大概率会产生矛盾(推进业务功能为王)。
最终还是说服了产品和其他技术同事(主要是相互信任有默契),只需要各个平台按照我的数据标准,把数据中心需要的数据,定时打包传递到消息队列里,数据中心消费者读出来再根据标签存放数据,就可以了。
目前一切运行都正常,当运营产品需要新的业务数据时,很简单,开队列,设计数据标准,发给各个项目负责同学。在这个体系内可以很快实现各种数据同步,整合,统计分析。
RabbitMQ:初识消息队列_第4张图片

总结:使用队列做数据传输,可以不用去考虑各个平台间的各种数据协议、结构和权限校验问题,定好我要的,各个平台提供给我,省去了很多麻烦的动作。

缓冲,削峰

经过:还是业务原因,所以说技术是服务部门,要服务于业务。需要把用户吸引到固定的时间点来,那就需要一些产品功能做配合了,比如限时搞个什么秒杀活动,红包雨等等都是手段,这些场景叠加,再加上先到先得,好家伙,压力可想而知(我们业务又很真实不搞虚的)。
其实以前有很多类似的场景,又来了(那时年少,虽然现在我还是小白~~~),但是都用的解决方式都比较传统,就是加服务器提高吞吐能力,也用了队列但是不是那么深入。
其实很早我就想在项目的很多位置都加上队列,当我和团队同学沟通时,他们会告诉我:“这里压力没那么大,处理速度也很快,用队列干啥呢?”,其实我也没想好,就索性从了(那时年少~~~)。最近随着看了一些其他案例,加上对自己业务的结合,我觉得此时的我可以从下面三个点入手说服他们了。
1.快速定位薄弱的地方。
2.使系统更加稳定。
3.节省成本(主指硬件成本,可能会加大开发时间成本)。

总结:不管是看的见还是看不见的地方,都极可能成为压死骆驼的最后一根稻草,做了很久的业务再回头维护,需要更多的时间。如果在每个关键位置我们都加上了队列,系统至少不会再因为这些崩掉,面对高峰,多点时间上的延迟,根据延迟我们也能快速定位到问题所在。
我们努力推进这件事情,但我也不一定正确(也许有我认知外的消耗),最终靠数据说话。

一.初见RabbitMQ

消息队列中间件(Message Queue Minddleware,简称MQ)

Rabbit(兔子)MQ

RabbitMQ(兔子),RabbitMQ的开创者认为,兔子行动迅速且繁衍能力十分疯狂,这款分布式软件用Rabbit命名再合适不过了。

消息

简单的如文本、字符串、JSON或内嵌对象等在应用间传送的数据,就是消息。

过程

当你要寄一个快递时,需要先送到快递小哥手里,小哥将它送到分拣中心,分拣中心会暂存你的快递,再通过一系列过程送到收件人手中。RabbitMQ就好比是在执行这个过程。

选择

主流有RabbitMQ,Kafka,ActiveMQ,RocketMQ等,选择每一款都有很多理由还劳烦大家自行百度(主要是其他的也没怎么用过,仅凭概念不好比较)。

二.为啥用RabbotMQ

三.基础概念

四.Linux安装步骤

五.Java代码使用实例

抱歉,本来想一股脑把列得全部写完,临时有事,先到这里,后面内容下篇更新(就是这么随意~)

你可能感兴趣的:(学习分享,rabbitmq,消息队列,java)