1.架构图及基本概念
2.基本概念
NameServer
两个功能
1.接收broker请求,注册broker路由信息
2.接收producer(发消息前) consumer(定时获取)请求,根据topic获取路由信息
Broker
功能:接收,存储,pull,转发消息
与NameServer交互:每个broker与name server集群中所有节点建立长连接,broker启动后将自己注册到nameServer,随后每个30s定期上报topic路由信息
生产者
与name server集群中一个节点建立长连接,定时读取路由信息(缓存本地),消息发送到master broker
消费者
与name server集群中一个节点建立长连接,订阅可以是master 或slave broker
topic
逻辑概念,消息的一级分类,topic分片
Queue
queue数量
this.defaultTopicQueueNums = 4;
与消费者关系,消费者小与Queue数量,平均分配策略,分配队列,多余consuemr不能消费消息
Queue是Topic在一个Broker上的分片等分为指定份数后的其中一份,是负载均衡过程中资源分配的基本单元。
tag
Topic下的次级消息类型/二级类型,业务细分,灵活控制
consumer.subscribe("TopicBroadcast", "TagA || TagC || TagD");
Producer 与 Producer Group
警告:考虑提供的生产者在发送消息时足够强大,每个生产者组只允许一个实例,以避免对生产者实例进行不必要的初始化
Consumer 与 Consumer Group
消费组 服务集群部署,及启动多个消费者,属于一个集群中。
消息种类
按发送特点分
1.同步
发送后,会阻塞到mq服务端发回响应。
2.异步
发送后,不等待服务端响应立即返回,继续发送下一个数据包;对比同步耗时在哪,broker响应时间。
3.单向
功能划分
普通,顺序,广播,延时,批量,事务,定时,延时
服务搭建
配置文件说明,管理台说明
4.怎么用:集成springBoot,及原理
5.使用场景,及基本方法,举例订单 代码设计,幂等
6.部分实现原理
发送
流程:msg-broker-queue
发送前明确topic,根据topic到nameServer获取broker注册信息(master),负载均衡算法,确定哪一个broker。
MessageQueue topic broker queue关系
1.根据topic获取路由信息,包含topic所有队列
2.取重试次数,选择发送队列,跳过上次失败的broker
3.设置header,构建RemotingCommand,发送
6.2 消费端消费原理,如何监听
消费
消息模式:广播 集群,消费组,消费者
pull push 长轮询
RocketMQ消息推模式的实现基于拉模式,在拉模式上包装一层,一个拉取任务完成后开始下一个拉取任务。
消息队列负载机制遵循一个通用的思想:一个消息队列同一时间只允许被一个消费者消费,一个消费者可以消费多个消息队列。
7.消息存储
8.通讯原理
8.1 场景:
producer,consumer -> broker
procuer,consumer(查询路由信息),broker(注册路由信息) -> NameServer
broker每隔30向nameServer上报信息,发送单向消息
8.2 Netty
编码解码