为什么使用消息队列
消息队列的常见使用场景有很多但是核心的有三个:解耦、异步、削峰
消息队列的有点和缺点
优点:特殊场景下解耦、异步、削峰。
缺点:
-
系统可用性降低:系统引入的外部依赖越多,越容易挂掉,本来你就是A系统调用BCD三个系统的接口就好了,人ABCD四个系统好好的没什么问题,你偏加个MQ进来,万一MQ挂了怎么办,整套系统崩溃了,就完蛋了
-
系统复杂性提高:硬生生加个MQ进来,你怎么保证消息没有重复消费?怎么处理消息丢失的情况?怎么保证消息传递的顺序性?
-
一致性问题:系统A处理完了直接返回成功了,人家都认为你这个请求成功了;但问题是,要是BCD三个系统哪里BD系统成功了,结果C系统写库失败了,咋整?数据就不一致了;所以消息队列是一种非常复杂的架构,引入它有很多好处,但是也得针对他带来的坏处做各种额外的技术方案和架构来规避掉。做好之后你会发现系统复杂度提升了一个数量积,但是关键时刻,用,还是要用的。
kafka、activemq、rabbitmq、rocketmq都有什么优缺点
具体参考:https://mp.weixin.qq.com/s/qwtOAlM9VvMvrKfIDWZmTA
https://github.com/doocs/advanced-java/blob/main/docs/high-concurrency/why-mq.md