说到消息队列,有些朋友可能经常会从别人口中听到一些名词,比如:服务程序的解耦,处理流量调峰,通过异步处理提升用户体验,缓冲批处理提高处理性能。作者擅长用大白话讲解,所以我不使用专业术语来解释专业问题。一直觉得消息队列的功能和快递柜很像。相似度如何?让我详细告诉你。1.白话消息队列我们来对比一下快递柜和消息队列。消息队列类比快递柜:生产快递柜的厂家有很多,比如丰巢(apachekafka)、快递快运(alibabaRocketMQ)、金林宝(ActiveMQ)等等,反正最常用的就这几个.快递柜负责暂存邮件,消息队列负责暂存消息数据。快递员比作消息生产者:快递员负责将邮件投递到快递柜,生产者负责将消息投递到消息队列。太棒了!消费者类比消息消费者:可能这个例子太贴切了,这句话怎么看都是废话。废话还是要说,生活中消费者取email,程序中消费者取消息数据。2、快递柜带来的好处(消息队列)先回顾一下没有快递柜的日子我们是怎么度过的:一天早上,突然接到快递员的电话:“小哥,你的快递来了”。我心想真是不好:“你要是不早不晚来,我马上就要上班了,你就在这个时候来,好吧,我等你一会儿。”结果快递员可能很不靠谱,有时候说堵车,有时候说马上就到,你上班要迟到了。这种情况让你很崩溃!突然有一天,小区里突然出现了一个叫快递柜的东西,这个东西不错。“哥,你快递来了”,心想谁是你哥:“啊,放在快递柜里,晚上下班我去取”。快递员高兴的把快递放进快递柜,开始打电话,一上午发了10封邮件。如果每件都送货上门,快递员至少要半个小时。现在可以了,快递柜里放了9个,1个用户要求送货上门,10分钟搞定。快递员觉得这东西真不错!快递员高兴,消费者其实也很满意。一些购物狂每天可能会收到10封左右的电子邮件。没有快递柜时,快递员一来电话就去取件(等一次)快递。有了快递柜,下班的时候就可以一并取走。上面的例子体现了消息队列(快递柜)的几个优点,请读者细细点评:异步解耦:有了快递柜,消费者不用再等快递员,提升了用户体验。消费者和生产者(快递员)之间的解耦,不会因为对方的运营行为而影响到自己独立的工作流程。用户不必等待和接收事件来阻止耗时。流量削峰:我们假设一个极端的情况,你通过各种渠道买了1000本书,某个时间突然有一个集中电话给你。你肯定没有能力一个小时收1000封邮件,所以你让快递员把邮件放进快递柜。因此,您可以根据自己的处理能力和自己的时间表来取件。同样,当我们的消费程序面临多用户、高并发请求时,将数据存储在消息队列中,可以削减流量数据峰值,根据程序能够处理的能力和资源来消费数据。缓冲批处理:生产商批量发货,爽!消费者可以一次检索多封邮件,酷!3、快递柜的推出带来的缺点说了这么多优点,那么快递柜有没有缺点呢?当然也引入了复杂性。毫无疑问,快递柜(消息队列)是多余的,在原来的收件流程中是不存在的。所以需要有地方放,还需要防火、防盗、防潮,需要保养。消息队列中间件也是一样,需要在服务器区安装,维护。会造成暂时的数据不一致。如果没有快递柜,你收到的时候就真的收到了邮件。但使用快递柜后,您会收到“邮件已放入快递柜”的信息,但与您实际收到邮件之间会有一定的延迟。当然,最后还是会收到邮件。如果选择“消息队列”快递柜,就不得不忍受暂时的不一致,接受“最终一致性”。当然,在极端情况下,如果快递柜坏了,你就不得不接受“邮件可能丢失”的事实,这在安全系数高的小区几乎不会发生。欢迎关注我的博客,本文转载更多优质知识合集,注明出处(一定要有链接,不能只是文字):字母哥博客-zimug.com如果觉得对你有帮助,请点赞分享!您的支持是我创作不竭的动力!.另外,作者近期输出了以下优质内容,期待大家的关注。《kafka修炼之道》《手摸手教你学Spring Boot2.0》《Spring Security-JWT-OAuth2一本通》《实战前后端分离RBAC权限管理系统》《实战SpringCloud微服务从青铜到王者》
