主要围绕3个功能:解耦、异步、削峰填谷
1.解耦:在复杂的业务环境下,不同模块与服务之间会有复杂高耦合的业务依赖,当某一项服务模块程序得到更改时候,会影响到其他业务模块(即如果直接使用函数调用或API调用会造成模块之间的耦合,当其中一个模块改变时需要同时修改调用方与被调用方的代码),项目不易于维护,有消息队列作为中间件,发送模块直接将消息发送至队列而无需知道接收方是谁,而接收方也可直接从队列中拉取数据进行处理,实现独立的消费消息从而实现解耦。
2.异步:以发送邮件为例,在未使用消息队列时,发送流程为:创建邮件模版,再由底层dao层拉取邮件内容,调用三方SDK发送邮件,整个过程的耗时是比较长的,就算是多线程下,也无法实现高性能,因为会长时间占用线程会造成线程阻塞,在消息队列的管理下,邮件可以直接发送到消息队列,之后直接返回“消息成功下发的结果”,后续发送业务模块实现异步的处理,不影响整个系统流程的执行,从而提高了系统的性能和响应速度。
3.削峰填谷:削弱高消息并发量带来的冲击,并以平稳高效的方式处理数据。消息队列作为不同服务模块的中间件,也是作为一个缓冲区,以发送邮件为例,当某一时刻出现大量邮件发送,线程数量无法满足处理数据的性能,邮件消息会存储在消息队列中,这个时候,线程依旧正常保持处理数据的能力,也不会出现线程积压,导致大面积的出现消息发送失败,服务宕机。