ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

消息队列——消息队列的应用场景

2021-06-19 17:59:12  阅读:144  来源: 互联网

标签:场景 队列 系统 消息 发送数据 数据


1 定义

消息队列:是一种数据结构
生产者:把数据放入到队列中的一方
消费者:把数据从队列中取出的一方

2 存在的意义

2.1 解耦

场景一:
存在三个系统
a系统要给b系统发送数据,调用系统b的接口
a系统要给c系统发送数据,调用系统c的接口
如果有一天b不需要a的数据了,就需要让a注释掉掉b接口的代码
如果新增系统d要接受数据,又要增加调用系统d的代码
这些调用逻辑都是一些重复的不可避免的劳动
此处的a系统与bcd系统高度耦合了,因为之间的数据交互如果需要修改,或者接受数据的系统出现了问题,那么a系统的调用逻辑还要思考需不需要继续发送数据

场景二:
在上述场景加入消息队列,消息队列是生产者(a系统)与消费者(bcd系统)之间的一个数据交互中转站
a系统发布消息,bcd订阅消息,如果不需要订阅就取消订阅即可,并不需要修改发布消息的代码

2.2 异步

消息队列是一个异步任务,如果a系统要完成产生数据(100ms),发送数据至系统b(300ms),发送数据至系统c(300ms)
此时a系统完成消息发送是一个同步任务,完成时间是100+300+300=700ms
如果用了消息队列,a系统只要产生消息,并发送至消息队列,由消息队列异步回调订阅过的系统接口
此时a系统完成发送消息的时间是100ms

2.3 削峰/限流

如果有一个商场网站出了促销活动,此时每秒的请求数是5000,一般的mysql只能处理2000个左右的并发。
此时在用户与mysql之间加入mq,它可以接受者5000个请求,但是只给mysql发送2000个。
就像一个喷水的管子,如果突然流水量过大,管子就会裂开,我们通过开关把水流量放小一点就问题不大,但是我们		  要知道,在这个开关后水压还是这么大,mq做到的只是限制最大量。

2.4 其他应用场景

日志处理:将大量日志存储到消息队列中(一般采用分布式消息队列kafka),解决大量日志传输的问题。其中,消息队列负责日志数据的接收,存储和转发;
消息通讯:点对点通讯或聊天室通讯。

3 使用消息队列会有什么优缺点

优点:

其实就是上文中谈到的,在特殊场景下的应用好处,解耦、异步与削峰等。

缺点:

系统可用性:
系统因为依赖与MQ消息队列这个服务,若这个服务崩溃了,那么我们的整个系统将不可用。为此往往我们都是通过集群/分布式部署来实现MQ高可用的。
高可用:通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性
系统复杂度:
我们将数据写到消息队列上,就有可能会存在数据丢失的情况。以及我们如何保证消息没有被重复消费等问题。
一致性问题:
A系统将请求写入到消息队列后就返回请求成功了,假设在多机部署的时候,系统B、C写库成功,假设D写入失败了,这种情况下就会产生数据不一致的问题。
感谢原作者的贡献:https://www.jianshu.com/p/ec7c2503c3ef

感谢:https://huang_zhao.gitee.io/task/

标签:场景,队列,系统,消息,发送数据,数据
来源: https://blog.csdn.net/just_do_it_20/article/details/118056924

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有