rocketMQ消息发送流程

rocketMQ版本:4.5.2

本次只是简单从rocketmq example里quickstart的producer例子进入,了解下消息发送的一个简单流程,一些比较复杂的流程会在后续学习中继续以新文章记录。

在这里插入图片描述
首先,从例子中可以看到要先启动producer。进入start方法,查看相应的启动流程。
在这里插入图片描述

----- DefaultMQProducerImpl start

继续进入DefaultMQProducerImpl的start方法。
在这里插入图片描述
由此可以看出,一开始会先检查一些相应的配置,点进去checkConfig()方法,可以看出其实就是在检查producerGroup是否为空,是否符合命名规则,,是否等于默认的producerGroup。
在这里插入图片描述
之后,获取mq客户端实例。
在这里插入图片描述
在这里插入图片描述

简单跟进去看一下客户端实例如何获取的。

在这里插入图片描述在这里插入图片描述
可以看到clientId的命名规则是"客户端ip@实例名",所以猜测将实例名改为进程id,则同一个客户端可以启动多个producer实例。
同时可以简单看一下MQClientInstance里的一些属性,大致了解下具体有哪些即可。
在这里插入图片描述
获取客户端实例后,就是将producer注册到该客户端实例中,从上图我们可以看到MQClientInstance有用于缓存生产组的数据结构。注册即将该producerGroup保存到producerTable中。
在这里插入图片描述
在这里插入图片描述

----- MQClientInstance start

之后就是启动客户端实例。
在这里插入图片描述
客户端实例启动主要是启动一些定时任务以及一些服务(拉取消息的pullMessageService以及负载均衡的rebalanceService)
在这里插入图片描述
简单看一下startScheduledTask();
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

一切启动完成,serviceState设为RUNNING
在这里插入图片描述

再次回到producer例子里,启动完producer,就可以发送消息了。
在这里插入图片描述

-----DefaultMQProducerImpl send

在这里插入图片描述

-----DefaultMQProducerImpl sendDefaultImpl

(一些简单的检查就不继续截图出来了,下图注释会标明具体都是检查哪一些内容)
在这里插入图片描述
选择某个队列进行消息发送
在这里插入图片描述
一些具体的细节,如如何获取topic路由、如何选择要发送的队列等可以看我的上一篇博文

这里我们选择看同步发消息的逻辑:
在这里插入图片描述

在这里插入图片描述
从这里可以看出来,rocketmq发送消息时,是会对比较长的消息进行压缩的。
在这里插入图片描述
发送消息
在这里插入图片描述

-----MQClientAPIImpl sendMessage

在这里插入图片描述
在这里插入图片描述
这里就是构造一个发送消息的请求,然后将消息发送给broker,具体的如何发送就等之后另起一篇来学习。
整个消息发送流程大致就是这样的,producer启动,客户端实例启动,期间会检查一些相应配置,启动一些服务和定时任务,消息发送时要去nameserver获取topic的路由信息,需要按一定机制选择可以发送的队列,然后将消息发送到broker上。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值