消息队列初始 偏执的太偏执、 2021-11-04 16:14 204阅读 0赞 1. JMS简介 > 全称:Java Message Service > 中文:Java消息服务 > JMS是Java的一套API标准,最初的目的是为了使应用程序能够访问现有的MOM系统(MOM是Message Oriented Middleware的英文缩写,指的是利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。);后来被许多现有的MOM供应商采用,并实现为MOM系统。 > 常见MOM系统包括Apache的ActiveMQ、阿里巴巴的RocketMQ、IBM的MQSeries、Microsoft的MSMQ、BEA的RabbitMQ等。(并非全部的MOM系统都遵循JMS规范) > 基于JMS实现的MOM,又被称为JMS Provider 1. 消息 > “消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。 > 消息被发送到队列中。“消息队列”是在消息的传输过程中保存消息的容器。消息队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。 1. 消息队列的主要功能 > a. 削峰 > > > 在秒杀或抢够活动中使用广泛使用。这种活动一般会因为流量过大,应用系统配置承载不了这股瞬间流量,导致系统直接挂掉,即传说中的“宕机”现象。为解决这个问题,我们会将那股巨大的流量拒在系统的上层,即将其转移至 MQ 而不直接涌入我们的接口,此时MQ起到了缓冲作用。、 > > ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poYW5nbmluZ2tpZA_size_16_color_FFFFFF_t_70] > b. 应用解耦 > > > 场景说明:后台发货系统,发货后快递发货系统需要通知订单系统,该订单已发货。如果我们用传统的做法是,快递发货系统调用订单系统的接口,更新订单为已发货。 > > 传统模式的缺点: > > 1) 假如订单系统无法访问,则订单更新为已发货失败,从而导致发货失败; > > 2) 发货系统与订单系统耦合; > > 如何解决: > > ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poYW5nbmluZ2tpZA_size_16_color_FFFFFF_t_70 1] > > 发货系统:发货后,发货系统完成持久化处理,将消息写入消息队列,返回发货成功。 > > 订单系统:订阅发货的消息,获取发货信息,订单系统根据信息,进行更新操作。 > > 如上,发货系统在发货的时候不用关心后续操作了,如果订单系统不能正常使用。也不影响正常发货,实现订单系统与发货系统的应用解耦。 > c. 异步处理 > > > 场景说明:用户注册后,需要发注册邮件和注册短信。传统的做法有两种1.串行的方式;2.并行方式 > > (1)串行方式:将注册信息持久化后,发送注册邮件,再发送注册短信。三个业务全部完成后,返回给客户端。 > > > > 并行方式:将注册信息持久化后,发送注册邮件的同时,发送注册短信。三个业务全部完成后,返回给客户端。与串行的差别是,并行的方式可以提高处理的时间。 > > ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poYW5nbmluZ2tpZA_size_16_color_FFFFFF_t_70 2] > > 假设三个业务节点每个使用100毫秒钟,不考虑其他开销,则串行方式的时间是300ms,并行的时间可能是200毫秒。则串行的方式1秒内可处理3次请求,并行方式1秒内可处理5次请求,综上所述,传统的方式系统的性能(并发量,吞吐量,响应时间)会有瓶颈。如何解决这个问题呢? > > 引入消息队列,将不是必须的业务逻辑,异步处理。如下图所示 > > ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poYW5nbmluZ2tpZA_size_16_color_FFFFFF_t_70 3] > > 按照上图,用户的响应时间相当于是注册信息写入数据库的时间和将消息插入消息队列,也就是105毫秒。注册邮件,发送短信消息写入队列后,直接返回。如此消息队列异步处理后,1秒内可处理9次请求。大大提高了系统的性能 > d. 消息通讯 > > > 消息通讯是指,消息队列一般都内置了高效的通信机制,因此也可以用在实现消息通讯。如点对点消息队列,或者聊天室等。 > > 点对点通讯:客户端A和客户端B使用同一队列,进行消息通讯。 > > 聊天室通讯:客户端A,客户端B 订阅同一主题,进行消息发布和接收。 > > 以上实际是消息队列的两种消息模式,点对点或发布订阅模式。 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poYW5nbmluZ2tpZA_size_16_color_FFFFFF_t_70]: /images/20211104/dcff625d1e124a83b9bd9568137dfa4e.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poYW5nbmluZ2tpZA_size_16_color_FFFFFF_t_70 1]: /images/20211104/0e96891219274d84a1efc7024f2c2beb.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poYW5nbmluZ2tpZA_size_16_color_FFFFFF_t_70 2]: /images/20211104/8734c116bff14ab294f7423c405cf82b.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poYW5nbmluZ2tpZA_size_16_color_FFFFFF_t_70 3]: /images/20211104/6e12062e94254335a87bc97ccd12d855.png
相关 消息队列 一、消息队列MQ(Message Queue): 1)消息队列是一种先进先出的数据结构; 2)消息队列使用的“协议”不是具体的通讯协议,而是更高层次通讯模型。它定义 「爱情、让人受尽委屈。」/ 2023年10月11日 11:11/ 0 赞/ 56 阅读
相关 消息队列? 对于 MQ 来说,其实不管是 RocketMQ、Kafka 还是其他消息队列,它们的本质都是:一发一存一消费。下面我们以这个本质作为根,一起由浅入深地聊聊 MQ。 01 从 Bertha 。/ 2023年10月10日 12:49/ 0 赞/ 34 阅读
相关 消息队列 1. 消息队列在项目中的使用 背景:在分布式系统中是如何处理高并发的。 由于在高并发的环境下,来不及同步处理用户发送的请求,则会导致请求发生阻塞。比如说,大量的ins ﹏ヽ暗。殇╰゛Y/ 2022年12月15日 03:23/ 0 赞/ 278 阅读
相关 消息队列 https://www.cnblogs.com/457248499-qq-com/p/7392678.html 来源 消息队列:在消息的传输过程中保存消息的容器。 迈不过友情╰/ 2022年05月30日 07:42/ 0 赞/ 293 阅读
相关 消息队列 消息队列是啥?我觉得大家都心知肚明,已经众所周知到不用解释的程度。不过,但凡学习、解释一样东西,都应该遵循 “它是什么?”、 “做什么用?”、 “为啥要用它” ╰半橙微兮°/ 2022年04月23日 08:42/ 0 赞/ 364 阅读
相关 消息队列 消息队列介绍 维基百科上的描述:在计算机科学中,消息队列(Message queue)是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通 红太狼/ 2022年01月26日 10:51/ 0 赞/ 356 阅读
相关 消息队列 为什么写这篇文章? 博主有两位朋友分别是小A和小B: 1. 小A,工作于传统软件行业(某社保局的软件外包公司),每天工作内容就是和产品聊聊需求,改改业务逻辑。再不然就 小咪咪/ 2021年12月20日 06:51/ 0 赞/ 446 阅读
相关 消息队列初始 1. JMS简介 > 全称:Java Message Service > 中文:Java消息服务 > JMS是Java的一套API标准,最初的目的是为了使应用程序能 偏执的太偏执、/ 2021年11月04日 16:14/ 0 赞/ 205 阅读
还没有评论,来说两句吧...