优点就是在特殊场景下有其对应的好处,解耦、异步、削峰。
缺点有以下几个:
1. 系统可用性降低
系统引入的外部依赖越多,越容易挂掉。本来你就是 A 系统调用 BCD 三个系统的接口就好了,人 ABCD 四个系统好好的,没啥问题,加个 MQ 进来,万一 MQ 挂了可能整套系统就都崩溃。
2. 系统复杂度提高
加个 MQ 进来,要保证消息没有重复消费?怎么处理消息丢失的情况?怎么保证消息传递的顺序性?
3. 一致性问题
A 系统处理完了直接返回成功了,人都以为你这个请求就成功了;但是问题是,要是 BCD 三个系统那里,BD 两个系统写库成功了,结果 C 系统写库失败了,咋整?你这数据就不一致了。
RabbitMQ 消息队列参考一文: