1.事务监听器的实现原理(TransactionListenser)
本地事务消息的状态(LocalTransactionState):提交消息、回滚消息、未知
2.RocketMQ 消费端实现原理(MQConsumer)
消费者调用过程:
消费者实现原理:
消费者获取消息提供了pull和push
MQAdmin:提供了创建主题、检索消息偏移量、获取最早存储的消息时间、根据消息id查找消息、
消息模型(MessageModel)分为:广播(每个消费者消费的消息相同)和集群负载均衡(多个消费者共同消费队列消息,每个消费者处理的消息不同)
3.消费端负载均衡的实现原理:
通过调用ReBalanceImpl 中构造函数,透传分配消息队列策略。
基于消息模型和消息是否有序,进行负载均衡
负载均衡核心实现类:RebalanceImpl
topic(消息模型)分为:广播与集群
consumer分配消息的策略算法:
1.根据机房就近原则
2.平均分配
3.循环平均哈希
3.根据配置
4.根据机房
5.一致性hash
总结:1.RocketMQ 消费端负载均衡,就是首先判断消息获取方式是pull还是push,然后依据消息模型是broadcast还是clustering模式与消息是否有序,根据负载均衡策略算法(默认是平均分配算法),进行重新负载消息,调整每个topic对应的线程数,然后通知broker.
2.pull模式的实现与push模式的实现类似。
4.服务提供方producer负载均衡实现
Producer端在发送消息的时候
1.根据Topic找到指定的TopicPublishInfo,在获取了TopicPublishInfo路由信息后,RocketMQ的客户端在默认方式下selectOneMessageQueue()方法会从TopicPublishInfo中的messageQueueList中选择一个队列(MessageQueue)进行发送消息。
2.容错策略均在MQFaultStrategy这个类中定义。这里有一个sendLatencyFaultEnable开关变量,如果开启,在随机递增取模的基础上,再过滤掉not available的Broker代理。
所谓的"latencyFaultTolerance",是指对之前失败的,按一定的时间做退避。例如,如果上次请求的latency超过550Lms,就退避3000Lms;超过1000L,就退避60000L;如果关闭,采用随机递增取模的方式选择一个队列(MessageQueue)来发送消息,latencyFaultTolerance机制是实现消息发送高可用的核心关键所在。
路由基础信息
容错策略
latencyFaultTolerance机制: