RocketMQ源码深度解析四之Producer篇

前言:本篇将从启动,Producer发送不同类型的消息的逻辑等方面,来深入了解。

(一)启动
在应用层初始化DefaultMQProducer时候,会以Producer名或者RPCHook的任一个或两个作为参数初始化DefaultMQProducer对象,然后对DefaultMQProducer对象设置NameServer地址等参数,然后调用start方法启动Producer,其实内部调用了DefaultMQProducerImpl.start 方法。大致逻辑如下:
1、检查 DefaultMQProducerImpl.ServiceState 的状态(初始化状态为
ServiceState.CREATE_JUST);只有状态为 CREATE_JUST 时才启动该Producer;
其他状态均不执行启动过程;
2、 将 DefaultMQProducerImpl.ServiceState 置为 start_failed,以免客户端同一个进程中重复启动
3、检查 producerGroup 是否合法
4、 若 producerGroup 不等于“ CLIENT_INNER_PRODUCER”则设置 Producer的实例名( instanceName);
5、 构建该 Producer 的 ClientID,等于 IP 地址@instanceName;
6,创建 MQClientInstance 对象。如果该ClientID对应的MQClientInstance存在则直接返回。说明一个 IP 客户端下面的应用,只有在启动多个进程的情况下才会创建多个 MQClientInstance 对象;
7、 将 DefaultMQProducerImpl 对象在 MQClientInstance 中注册,以producerGroup 为 key 值、 DefaultMQProducerImpl 对象为 values 值存入
8、以主题名“ TBW102”为 key 值,新初始化的 TopicPublishInfo 对象为 value值存入 DefaultMQProducerImpl.topicPublishInfoTable 变量中;
9、 入参 startFactory 等于 true, 故调用 MQClientInstance.start 方法启
动 MQClientInstance 对象;
10、设置 DefaultMQProducerImpl 的 ServiceState 为 RUNNING;
11、立即调用 MQClientInstance.sendHeartbeatToAllBrokerWithLock()方

(二)向Broker发送心跳消息
1、初始化 HeartbeatData 对象,将该 Producer 或 Consumer 的 ClientID 赋值给 HeartbeatData 对象的 clientID 变量;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值