rocketmq源码分析:事务监听器(TransactionListenser)、消费端(MQConsumer)、负载均衡(RebalanceImpl)

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机制:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值