MQ有哪些?如何选型?
常见的:RabbitMQ, ActiveMQ,Kafka,RocketMQ
RabbitMQ–中小型公司,erlang语言天生具备高并发,开源易维护;
RocketMQ–大公司,依赖于阿里,可能需要专人定制化开发;
Kafka-----大公司,若需要日志采集功能,首选kafka;
1、MQ常用的使用场景
异步:
场景说明: 用户注册后,需要发送注册邮件和注册短信流程:
处理模式:引入中间件MQ, 将消息写入消息队列,非必要的业务逻辑(注册邮件和注册短信)以异步方式运行,加快响应速度(用户注册成功即给用户响应)
解耦:
场景说明:分布式系统中的订单系统和库存系统, 用户下单后,需要调用库存系统接口来通知库存系统, 若库存系统故障,则下单失败;
处理模式: 引入消息队列, 用户下单后,订单系统完成持久化处理,将消息写入消息队列,用户端返回下单成功, 库存系统 向消息队列订阅下单的消息,获取并进行库存操作;
流量削峰:
场景说明: 电商系统秒杀, 并发量大,所有的请求都堆积到数据库,造成数据库异常
处理模式:在应用前端加入消息队列,将 用户请求写入消息队列