源码分析RocketMQ之Producer

一、RocketMq物理部署结构图

源码分析RocketMQ之Producer
1、Producer 消息的发送者
  1、从架构图中可以看出Producer集群与NameServer集群中的一个节点进行长连接通讯。
    定期从NameServer获取Topic路由信息,将路由信息保存在本地内存地址中,
  2、每个Producer与所有的Broker Master建立长连接通讯,且定时向Master Broker发送心跳
    ,它只向Master Broker发送消息,从Message Queue列表中选择合适的Queue负载均衡发送消息
  3、支持发送普通消息、事物消息、定时消息,支持同步、异步、单向发送
2、Producer的启动过程
我们主要了解
  1、消息生产者启动时具体做了什么?
  2、一个应用发送多个不同topic时,发送到不同集群的broker,如何处理?
生产者类关系图

 

 如上图MQProducer存在两种实现
1、DefaultMQProducer 非事物消息生产者
  继承自MQProducer,此接口定义了一系列发送消息的方法,最终网络通信会交给MQClientAPIImpl处理。
属性:
  1、producerGroup 生产者分组
  2、createTopicKey 自动创建Topic TBW102
  3、defaultTopicQueueNums 新建一个Topic默认设置4个MessageQueue
  4、sendMsgTimeout 发送消息的超时时间 单位ms
  5、compressMsgBodyOverHowmuch 这个就是当发送的消息内容大于这个数的时候 进行压缩,压缩阈值,默认是4k
  6、retryTimesWhenSendFailed 发送失败的时候重试次数 默认是2次
  7、retryTimesWhenSendAsyncFailed 异步发送失败的时候重试次数 默认是2次
  8、retryAnotherBrokerWhenNotStoreOK 指示是否在内部发送失败时重试另一个broker
  9、maxMessageSize 允许发送消息最大大小 默认是4m
2、TransactionMQProducer 事物消息生产者,RocketMq从4.1.3版本又开始支持事物消息。
  1、发送half消息
  2、消息队列返回发送结果
  3、成功执行本地事物TransactionListener.executeLocalTransaction
  4、获取本地事物执行状态提交/回滚/未知
  5.如果第四步为未知,则消息队列会反查本地事务,本地事务查询后再通知消息队列最终提交或回滚
3、MqAdmin Mq管理基础接口 核心方法

//创建一个主题
void createTopic(final String key, final String newTopic, final int queueNum) throws MQClientException;
//根据 时间戳从队列中 查找其偏移量
long searchOffset(final MessageQueue mq, final long timestamp) throws MQClientException;
//查找该消息 队列中 最大的物理偏移量
long maxOffset(final MessageQueue mq) throws MQClientException;
//查找该消息队列中最小物理偏移量。
long minOffset(final MessageQueue mq) throws MQClientException;
//获取最早的存储消息时间
long earliestMsgStoreTime(final MessageQueue mq) throws MQClientException;
//根据消息偏移量查找消息
MessageExt viewMessage(final String offsetMsgId) throws RemotingException, MQBrokerException, InterruptedException, MQClientException;
//根据条件查询消息
QueryResult queryMessage(final String topic, final String key, final int maxNum, final long begin, final long end) throws MQClientException, InterruptedException;
//根据 主题 与 消息ID 查找消息 。
MessageExt viewMessage(String topic, String msgId) throws RemotingException, MQBrokerException, InterruptedException, MQClientException;

 4 、MQProducer:核心方法解析(生产者基础接口)

//启动
void start() throws MQClientException;
 //关闭
void shutdown();
//根据topic获取对应队列信息
List<MessageQueue> fetchPublishMessageQueues(final String topic) throws MQClientException;
//同步-消息发送
SendResult send(final Message msg, final MessageQueue mq) throws MQClientException,RemotingException, MQBrokerException, InterruptedException;
//异步-消息发送
void send(final Message msg, final MessageQueueSelector selector, final Object arg, final SendCallback sendCallback) throws MQClientException, RemotingException, InterruptedException;
//同步-选择队列消息发送
SendResult send(final Message msg, final MessageQueueSelector selector, final Object arg, final long timeout) throws MQClientException, RemotingException, MQBrokerException,InterruptedException;
//单向-消息发送    
void sendOneway(final Message msg, final MessageQueue mq) throws MQClientException, RemotingException, InterruptedException;
//事务消息-发送
TransactionSendResult sendMessageInTransaction(final Message msg, final Object arg) throws MQClientException;
//批量消息-发送   
SendResult send(final Collection<Message> msgs) throws MQClientException, RemotingException, MQBrokerException, InterruptedException;

5、ClientConfig 核心属性方法解析(客户端配置)
  1、namesrvAddr 默认去jvm启动参数 rocketmq.namesrv.addr ,系统环境变量 NAMESRV_ADDR 中找
  2、clientIP 本客户端地址,他自己就会去找的
  3、instanceName 默认是去jvm启动参数rocketmq.client.name 中找,没有设置DEFAULT,这个它会自己重新设置的
  4、clientCallbackExecutorThreads 执行callback 线程池的线程核心数
  5、pollNameServerInterval 多久去nameserv 获取topic 信息,默认是30s
  6、heartbeatBrokerInterval 与broker心跳间隔时间,默认是30s,就是每隔30向broker发送心跳
  7、persistConsumerOffsetInterval 持久化ConsumerOffset 默认5秒 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值