学习了解MQ
1.为什么使用mq
(1).MQ的优点
-
解耦
以工作流系统O举例,假如在不使用mq的情况下,当流程审批结束,需要给A,B,C三个系统发送审批结果,则需要O系统分别发送消息给ABC系统,当加入新的XX系统或者ACB系统当中其中一个不需要消息推送时,O系统都需要修改自己的代码.
当使用mq以后,O系统把审批结果发送到mq中,那个系统需要这个审批结果数据,自己去mq中去消费即可,当不需要时不再去mq获取消息,无论其他系统需不需要,都不需要去修改O系统的代码,也不需要考虑其他系统是否调用成功,是否调用超时等问题,以此做到解耦
-
异步
场景:以我目前开发的项目为例,当事务所系统新建项目,项目的service调用保存方法(需要执行0.1秒),接着调用activiti发起工作流审核(耗时0.1秒),工作流系统再调用消息推送(耗时0.1),接着调用薪酬系统(耗时0.3秒).这样等所有代码执行完毕,响应给用户耗时比较久,就会影响操作体验.
当试用mq后,保存完项目信息后,把项目发送到mq中,其他几个系统自己去mq中消费,即保存后就可以响应用户,耗时短,用户体验较好
-
削峰
场景:假如每日中午12点到12点10分,都会有三四千万访问量,如果这三四千万直接访问项目,项目直接操作数据库,那么数据库和项目基本蹦了.
通过MQ则,把所有请求先发送到MQ,项目根据自己实际的并发量去消费这些请求,当然会有很多请求积压在MQ,这是合理的.系统会慢慢把这些请求处理完.
(2).MQ的缺点
系统可用性降低,假如MQ挂了,就会影响整个项目,就等于整个项目挂了.
导致系统要考虑的问题变多,导致系统复杂性变高.例如:消息丢失、消息重复消费、消息重复发送、消息顺序错乱,消息积压等各种问题
一致性问题,如果没有MQ有事务保持系统一致性,用了MQ以后,A系统保存操作,再向MQ发送消息,B系统成功操作数据库,C系统也成功操作,但是当到D系统时操作失败.再用MQ没有事务的情况下,就导致不一致