优势
-
应用解耦
假如有以下系统,我们下单需要库存系统,支付系统,物流系统的协作,如果使用远程调用的方式,如果其中一个系统挂了,那么整个系统将处于瘫痪状态,这样系统之间的耦合性就会很高
如果某一天需要增加一个系统,或者修改某个系统,那么订单系统就会频繁的改动,那么就会造成系统维护很复杂,那么如过加了MQ的,订单系统就把订单订单发送到mq,其他系统只需要从mq中取出订单信息去消费就可以了。比如库存系统失败,他也不会影像整个系统。如过需要加入x系统只需要x系统从mq中取出消息消费就行
-
异步提速
下单到物流是一个同步的操作,如过加入MQ,如过下单只需要花费保存数据的操作,以及发消息到mq的操作花费的时间 -
削峰填谷
没有MQ的时候,用户的所有请求落到A系统
有了MQ之后,用户的请求先发送到mq,在有A系统一个一个的取出消费
劣势
- 系统可用性降低
系统引入的外部依赖越多,系统的稳定性越差。一旦MQ宕机,就会对业务造成影像,如果没有MQ,只需要保证系统与B系统的可用性就行,加了MQ还得保证mq的可用性 - 系统复杂性提高
MQ的加入增加了系统的复杂度,以前系统间是同步的远程调用,现在通过mq进行异步调用。还需要考虑消息会不会被重复消费,MQ是否可用,消息消失,消息传递的顺序性等。 - 一致性问题
A系统处理完业务,通过MQ给B,C,D三个系统发送消息,如果B系统,C系统处理成功,D系统处理失败,如果保证数据的一致性