目录
- RocketMQ
- 1、什么是RocketMQ?
- 常用术语:
- 2、为什么需要消息队列
- 3、什么是异步处理
- 4、什么是服务解耦
- 5、什么是流量控制
- 6、消息队列两种模型
- 队列模型:
- 发布/订阅模型:
- 总结:
- 7、怎么保证消息不丢失
- 8、如何处理消息被重复消费
- **出现消息重复的情况:**
- **解决方法:**
- 9、如何保证消息的有序性
- 全局有序
- 部分有序
- 10、如何处理消息堆积
- **1、业务逻辑处理:**
- **2、生产者producer限流**:限制发送消息的速度
- **3、水平扩容:**
- **问题:MQ积压了几百万数据**
RocketMQ
1、什么是RocketMQ?
RocketMQ 是一个消息中间件,使用的数据存储结构是队列,队列的特点是先进先出。消息队列就是一个使用队列来通信的组件。
常用术语:
RocketMQ(nameserver(broker(topic(MessageQueue(msg
Message: msg 消息
Message Queue: 消息存储的队列,可以有很多个消息队列,这些消息队列是存在broker里面的。
topic: 由一个或多个消息队列Message Queue 队列组成,为了做业务上的分类。
tag: 标签,对msg打个标签
broker: 这些消息队列肯定会保存在某一台生产服务器上,而这台生产服务器我们就称为 broker
nameserver: 服务注册中心(就是各个服务的节点信息注册到这个注册中心里面)
发送消息的是生产者producer,
接收消费消息的为消费者consumer,
消息队列服务端为broker。
消息从producer发往broker,broker将消息存储到本地,然后consumer从broker拉取消息,或者broker推送消息至consumer,最后消费。
为了提高并发度,
2、为什么需要消息队列
因为随着业务不断扩张,从之前的单体架构到现在的微服务架构,成百上千的服务之间的相互调用和依赖,我们需要一个东西来解耦各个服务之间的关系,控制资源合理的使用以及缓冲流量洪峰等等。
这个时候消息队列就应运而生。它常用来实现:异步处理、服务解耦、流量控制。
3、什么是异步处理
随着业务的发展,项目的请求链路会越来越长。比如之前的简单的查库存、下单,到后面的加上积分服务、短信服务等,这一路同步调用下来,客户可能就等着急了,这个时候就可以使用消息队列来进行异步处理。
调用链路长,响应就会变慢,对于一些不需要那么及时的功能,比如短信或者加积分之类的,只需要在下单结束后,扔个消息到消息队列中就可以直接返回响应了。积分服务和短信服务可以并行的消费这条消息。
优点:消息队列的异步处理可以减少请求的等待时间,还能让服务异步