开发者学堂课程【RocketMQ 知识精讲与项目实战(第三阶段):拉取信息的流程小结】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/704/detail/12499
拉取信息的流程小结
内容介绍:
一、牵扯的类
二、总体流程
一、牵扯的类
在这个过程当中牵扯到了几个重要的类,第一个就是 PullMessageService、第二个是 DefaultMQPushConsomerlmpl, 第三个是 MQlientAPllmpl以及PullMessageProfessor 这几个类的作用是什么?这几个类的作用,首先PULLmessage service的主要作用是发起拉取消息的请求。然后拉取消息的请求的处理是由DefaultMQPushConsomerlmpl去进行。真正的再去给客户端呢发出请求,去访问这个broker网络的,是由MQlientAPllmp发起的,然后PullMessageProfessor这个类是BROKER端处理请求的这个类。
二、总体流程
整个的流程是由线程 run 先启动起来之后,如果要处理请求,就从 PullRequest 的队列当中拿到一个请求对象,然后把这个请求对象进行提交,提交到 processQueue 中,由它具体去处理。
那它怎么处理?首先去做了一个流控,这个流控是通过两个方面去做,第一个是看消息的数量,如果已经大于1000条了或者消息的大小大于100兆,就暂时停止。如果这两个条件都没满足,那么需要拉取新的消息,就获得主题订阅的信息。然后构建消息拉取的系统标记,去解析 broker 地址,去发起异步拉取的一个请求,同步跟异步在这个过程当中基本上是差不多的,如果是异步,它是一个线程,
它会向服务端发送 RequestCode.PULL_MESSAGE 去进行处理,这个地方发完之后紧接着返回 pullRequestQueue take 又开始去做一个循环。顺着服务端继续往下,向服务端发送拉取的请求开始请求服务端。在服务端这里边首先从 Store,就是Defaultstore 当中去拿出这个消息,然后去进行一下消息的过滤,把正常能够返回给你的消息返回给我们的调用方,要调用方去解码,解码之后要有一个 pullback 给它回调。Pullback 的回调,其实也会做一个过滤的一个逻辑,然后再去将这个渠道的消息提交到消费者的这个消费线程池当中去进行一个处理。
整个过程,其实最重要的就牵扯到四个类,通过这四个类去完成消息的发送,请求的发送,最终,再会做一个响应回来,以上是整个消息拉取的小结。