MQ优缺点及不同组件的区别
为什么使用消息中间件? 消息队列核心使用场景<优点>: 解耦、异步、削峰 (1)解耦 传统模式: 传统模式的缺点: 系统间耦合性太强,如上图所示,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦! 中间件模式: 中间件模式的的优点: 将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而系统A不需要做任何修改。 (2)异步 传统模式: 传统模式的缺点: 一些非必要的业务逻辑以同步的方式运行,太耗费时间。 中间件模式: 中间件模式的的优点: 将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度 (3)削峰 传统模式 传统模式的缺点: 并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常 中间件模式: 中间件模式的的优点: 系统A慢慢的按照数据库能处理的并发量,从消息队列中慢慢拉取消息。在生产中,这个短暂的高峰期积压是允许的。 消息中间件缺点有哪些? 系统可用性降低 系统引入的外部依赖越多,越容易挂掉,需要保证消息队列的高可用。 系统复杂度提高 多一个 MQ 组件,那就需要面对 消息没有重复消费,处理消息丢失的情况,保证消息传递的顺序性等等系统级别问题。 一致性问题 多个消费者消费某一个消息就可能出现个别消费失败的情况,会出现数据不一致。 ActiveMQ、RabbitMQ、RocketMQ、Kafka