消息队列学习
https://www.bilibili.com/video/BV1Xw4m1i79Q
https://rocketmq.apache.org/zh/docs/quickStart/01quickstart/
消息队列基础
- 常见消息队列:kafka、rabbitmq、rocketmq。
- 消息队列的作用:解耦、异步、削峰。
- 假设有a、b、c和d四个子系统:
- 解耦:子系统间调用接口时,不需要考虑接口调用的异常情况,异常由消息队列和提供接口的系统处理。调用接口的系统不需要维护不同系统的接口调用代码。
- 异步:对于一些不需要及时性的业务,调用接口的系统不需要等待提供接口的系统的返回,降低响应时间。
- 削峰:消息队列可以将过高的流量请求暂存供业务系统持续消费,防止业务系统崩溃。
- 微服务的两种通信方式:
- rpc:同步,保证数据一致性。
- mq:异步,高吞吐量,高扩展性。
- 消息队列的两种传输模型:点对点模型、发布订阅模型。
- 点对点模型:消费者没有独立的身份,所有消费者都相同,一条消息都只会被一个消费者处理。
- 发布订阅模型:消费者具有独立的身份(订阅组),不同订阅组之间相互独立不会相互影响,每个订阅组都可以拿到全量消息。
rocketmq
- rocketmq的消息都是匿名的,无法判断生产者。
- 主题(topic):逻辑概念,并非实物。一个主题内可以包含多个消息队列,不同业务类型的数据发送到不同的主题中,通过主题实现存储隔离性和订阅隔离性。主题名称集群内全局唯一。
- 队列(mq):消息存储和传输的实际容器。队列中的消息具备顺序性。流式存储。消息会被持久化存储。
- 消息:最小数据传输单元,具有不可变性。
- 生产者:通常集成在业务系统中,和主题是多对多的关系。
- 消费者分组:消费者分组是多个消费行为一致的消费者的负载均衡分组。mq向消费者发送消息的方式有两种:顺序投递、并发投递。和主题是多对多的关系。
- 消费者:消费者必须在一个消费者组中。