为什么需要使用到消息队列
当系统的规模超过一定程度的时候,系统就可能会因为程序的复杂以及各部分代码的耦合度高等问题发生各种错误。
系统崩溃 -> 解耦
服务处理能力有限 -> 削峰
链路耗时长尾 -> 异步
日志如何处理 -> 先进入消息队列
削峰
削峰比较好理解,例如各种购物节或者是演出售票的时候可以在一瞬间服务器要承受成千上万的请求数量,系统很难一下子处理如此多的IO处理,可能会发生数据丢失的情况。因此引入消息队列相当于多了一个蓄水池,将请求先放入消息队列,再慢慢(相对来说较低的速度)传入系统或是数据库。
解耦
对于一个系统A需要提供一个通用接口给BCD等系统调用时,这样的相互调用较为复杂,维护起来也很麻烦。A系统需要考虑将数据发送给谁,是否调用成功,失败超时了怎么办等问题。一旦一个下游的系统不需要使用A的接口时,还需要修改系统A的代码。在此时引入消息队列等同于构建了一个通用的接口,A系统只需要充当生产者,BCD系统只需要充当消费者,消息均通过消息队列传递。
异步
当用户发出一个请求之后,正常情况下还要对后台的数据进行修改等一系列操作,如果等全部操作完成可能要经过较长的时间,会使得用户失去耐性。因此我们可以让消息传入消息队列后先返回给用户请求完成的提示,再由消息队列将数据向后传递。