RocketMQ——Producer篇:发送普通消息

以DefaultMQProducer.send(Message msg)方法为例,讲解Producer消息的发送逻辑,该方法最终调用DefaultMQProducerImpl.sendDefaultImpl(Message msg, CommunicationMode communicationMode, SendCallback sendCallback, long timeout)方法完成消息的发送处理,其中请求参数的默认值:communicationMode= CommunicationMode.SYNC(同步发送方式),sendCallback=null,timeout=3000。大致逻辑如下:
1、检查DefaultMQProducerImpl的ServiceState是否为RUNNING,若不是RUNNING状态则直接抛出MQClientException异常给调用者;

2、校验Message消息对象的各个字段的合法性,其中Message对象的body的长度不能大于128KB;

3、以Message消息中的topic为参数调用DefaultMQProducerImpl. tryToFindTopicPublishInfo (String topic)方法从topicPublishInfoTable: ConcurrentHashMap<String/* topic */, TopicPublishInfo>变量中获取TopicPublishInfo对象;
3.1)若没有对应的TopicPublishInfo对象,则创建一个新的TopicPublishInfo对象,并存入topicPublishInfoTable变量中(在该变量中有该topic的记录,表示该Producer在向NameServer获取到topic信息之后会为该topic创建本地消息队列Messa

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值