RocketMQ源码解析——Producer部分之生产者客户端MQClientInstance启动(2)


 前面说了 消息生产者的启动主要流程,从启动脚本到 DefaultMQProducer再到 DefaultMQProducerImpl然后到 MQClientInstance。都是一步一步委托的。这里之所以把 MQClientInstance单独拿出来说,是因为 MQClientInstance这个类不仅仅在生产者用到,他还是消费者,RocketMQ的Admin控制台的共用一个客户端实体类。类定义在client包中,这个类可以理解为一个工厂,是对消费者,生产者以及控制台三者的一个合集,内部封装了netty客户端,消息的生产,消费和负载均衡的实现类等。

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 消息生产者类

MQClientInstance的创建

 前面讲Producer的启动逻辑说到了MQClientInstance的创建,这里接着继续。整个类的创建过程就是内部的一些成员变量的创建和初始化的过程

public MQClientInstance(ClientConfig clientConfig, int instanceIndex, String clientId, RPCHook rpcHook) {
   

        this.clientConfig = clientConfig;
		//实例id   ip+"@"+instanceName
        this.instanceIndex = instanceIndex;
        //客户端netty配置
        this.nettyClientConfig = new NettyClientConfig();
		//回调的线程数
        this.nettyClientConfig.setClientCallbackExecutorThreads(clientConfig.getClientCallbackExecutorThreads());
		//是否用tls 也就是证书校验
        this.nettyClientConfig.setUseTLS(clientConfig.isUseTLS());
		//请求事件处理器
        this.clientRemotingProcessor = new ClientRemotingProcessor(this);
		//创建MQClientAPIImpl,同事注册一些时间处理器,和rpc调用的钩子方法
        this.mQClientAPIImpl = new MQClientAPIImpl(this.nettyClientConfig, this.clientRemotingProcessor, rpcHook, clientConfig);

        //更新nameServer的地址
        if (this.clientConfig.getNamesrvAddr() != null) {
   
            this.mQClientAPIImpl.updateNameServerAddressList(this.clientConfig.getNamesrvAddr());
            log.info("user specified name server address: {}", this.clientConfig.getNamesrvAddr());
        }

        this.clientId = clientId;
        //操作MQClientAPIImpl的封装类
        this.mQAdminImpl = new MQAdminImpl(this);

        //push模式消费的
        this.pullMessageService = new PullMessageService</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值