曾经我以为,消息队列是指设备之间通信,但实际上这太狭隘了。消息可以理解为对象之间的交互方式,队列是一种数据结构,先入先出。综合起来,消息队列就是指当很多消息传来的时候,应当如何处理的问题。
消息队列要解决的问题
案例
删库跑路(数据库无法访问)怎么办?
我们有不少内容都是需要对数据库进行操作的内容,但如果数据库被恶意攻击,无法访问或者数据清除时,我们能做些什么呢?
请求量过大怎么办?
一款火爆的APP一定有很多用户和热门功能,如果消息太多,造成服务器宕机怎么办?
链路耗时长尾怎么办?
完成一项服务需要经过很多步骤,要是时间太长无疑会造成用户流失,那怎么办?
日志如何处理?
我们需要使用日志,那怎么处理?
解决方案
解耦
把系统中不同的部分分离开来,使它们之间可以互相独立地运行,互不干扰,不被任何不必要的部分影响到。 使用消息队列作为缓冲服务,减少其中的依赖性。
削峰
减少最大请求量。利用消息队列存储未被执行的请求,每次从消息队列获取一定量的请求数据。
异步
长尾链路中的一部分内容是可以一起执行的。
日志处理
利用消息队列处理每一条日志。