1.为什么要使用消息队列呢?
什么是消息队列:消息队列就是存放消息的队列。最简单的消息队列包括3个角色:
- 消息队列:存储和管理消息,也被称为消息代理(Message Broker)
- 生产者:发送消息到消息队列
- 消费者:从消息队列获取并处理消息
消息队列的作用:解耦,举一个生活中的例子就是快递。快递员(生产者)把快递放到快递柜里边(Message Queue)去,我们(消费者)从快递柜里边去拿东西,这就是一个异步。
如果耦合的情况,相当于这个快递员直接把快递交给你,这事固然好,但是万一你不在家,那么快递员就会一直等你,这就浪费了快递员的时间,所以这种思想在我们日常开发中,是非常有必要的。
这种场景在秒杀中就变成了:我们下单之后,校验下单条件,把订单的信息发送到消息队列里,然后再启动一个线程去获取这个订单的消息,完成解耦,加快响应速度。
2.为什么要选择 RocketMQ?
Kafka:
- 优点:吞吐量大,性能好
- 缺点:会丢数据
- 使用场景:日志采集,大数据采集
RabbitMQ:
- 优点:消息可靠性高
- 缺点:吞吐量低
- 使用场景:小规模场景
RocketMQ:
- 优点:吞吐量大,性能好,消息可靠性高
- 缺点:客户端只支持 Java,兼容性上不是太好
3.如何保证消息的不丢失/可靠性呢?
消息可能在哪些阶段丢失呢?可能会在这三个阶段发生丢失:生产阶段、存储阶段、消费阶段。
所以要从这三个阶段考虑: