Rocketmq源码解析-客户端实例MQClientInstance

MQClientInstance介绍

为什么把MQClientInstance单独拿出来说呢?是因为无论是生产者还是消息者底层都会与broker进行打交道,从源码层面上,这部分的功能被抽象成一个单独的类,负责和broker打交道。
类定义在client包中,可以理解为是一个工厂,是对生产者、消费者以及控制台三者的合集,内部封装了netty客户端,消息的生产,消费和负载均衡的实现类等。另外MQClientInstance的实例化并不是直接new后使用,而是通过MQClientManager这个单例类,使用饿汉模式设计保证线程安全。

MQClientInstance的内部变量

字段名 类型 说明
clientConfig ClientConfig 客户端一些通用配置,topic拉取周期时间,心跳周期时间等
producerTable ConcurrentMap<String MQProducerInner> 注册了的生产者的实例缓存集合,MQProducerInner的实现类就是DefaultMQProducerImpl
consumerTable ConcurrentMap<String , MQConsumerInner> 注册了的消费则实例缓存集合,MQConsumerInner的实现类就是对应的pull和push两种方式拉取消息的类
adminExtTable ConcurrentMap<String, MQAdminExtInner> 注册了的admin实例缓存集合
nettyClientConfig NettyClientConfig netty客户端的配置类
mQClientAPIImpl MQClientAPIImpl MQ内部一些操作的api的实现,包括发送,消费消息和admin控制台的一些操作指令的实现,以及一些网络请求的处理
mQAdminImpl MQAdminImpl MQ的admin控制台操作的内部逻辑的实现类,控制台可以通过一些命令来对消息或者topic进行操作
topicRouteTable ConcurrentMap<String, TopicRouteData> topic的路由配置信息
pullMessageService PullMessageService push模式下,拉取消息的线程
rebalanceService RebalanceService 消息消费的负载均衡类
defaultMQProducer DefaultMQProducer 消息生产者类

Producer创建入口`producer.start()

Consumer的创建入口是consumer#start,原理是一样的,这里就不多余介绍了。

public void start(final boolean startFactory) throws MQClientException {
   
        switch (this.serviceState) {
   
            case CREATE_JUST:
                this.serviceState = ServiceState.START_FAILED;
				//创建客户端
                this.mQClientFactory = MQClientManager.getInstance().getOrCreateMQClientInstance(this.defaultMQProducer, rpcHook);
				//注册生产者,这个会把对应的生产者加入到producerTable中,用于startScheduledTask.sendHeartbeatToAllBrokerWithLock()任务定时发送心跳包的时候带过去
                boolean registerOK = mQClientFactory.registerProducer(this.defaultMQProducer.getProducerGroup(), this);
                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值