美文网首页
1.2-服务提供者调用流程

1.2-服务提供者调用流程

作者: xhrg | 来源:发表于2018-12-26 16:35 被阅读0次

一:入口

  • 在PersonServiceImpl|say方法中断点,然后根据debug的栈最前面找,很容易找到ChannelEventRunnable.class类,可以想象,如果要调用该类,必须先new,于是再在这个类的构造函数上debug。

  • 在ChannelEventRunnable构造函数上debug后,继续在栈找很容易找到NettyHandler类,NettyHandler继承了SimpleChannelHandler类。SimpleChannelHandler是netty的提供的Handler。到此NettyHandler的channelConnected便是建立连接的入口。而实际接收到client信息的是NettyHandler类的messageReceived方法。

二:接受信息调用链

根据上面说的调用链如下:

  • NettyHandler|messageReceived
  • NettyServer|received
  • MultiMessageHandler|received
  • HeartbeatHandler|received
  • AllChannelHandler|received
  • 调用到这里后会启动一个线程池去处理。并且根据参数传递持有NettyChannel。AllChannelHandler代码如下:
    public void received(Channel channel, Object message) throws RemotingException {
        ExecutorService cexecutor = getExecutorService();
        try {
            cexecutor.execute(new ChannelEventRunnable(channel, handler, ChannelState.RECEIVED, message));
        } catch (Throwable t) {
            throw new ExecutionException(message, channel, getClass() + " error when process received event .", t);
        }
    }

三:ChannelEventRunnable

  • 该类是一个执行单元,dubbo把接受到的请求放进线程池去处理。并且调用到ChannelEventRunnable的run方法,继而DecodeHandler|received。
  • 经过DecodeHandler|received后进入HeaderExchangeHandler
  • 在HeaderExchangeHandler的received有一行代码是:Response response = handleRequest(exchangeChannel, request);
    这里就是正式把request处理完返回response 。
  • 根据HeaderExchangeHandler进入DubboProtocol的reply

四:DubboProtocol

  • 在DubboProtocol中有一个 Map<String, Exporter<?>> exporterMap|该属性来自DubboProtocol的父类AbstractProtocol,根据request拿到key,比如com.wang.dubbo.api.PersonService:20880。从这里取到Exporter。
  • 拿到Exporter后,里面有一个包括的invoker。
  • 到了invoker后调用invoke,不过这里会经过很多invoke的Filter这些Filter有以下:

五:Filter

  • 1111111111.png

相关文章

  • 1.2-服务提供者调用流程

    一:入口 在PersonServiceImpl|say方法中断点,然后根据debug的栈最前面找,很容易找到Cha...

  • Laravel 服务提供者是如何注册的

    1. 服务提供者配置: 2. 服务提供者主要方法: 3. 注册服务提供者流程 3.1 注册流程的过程大概 3.1...

  • Boot 服务 直接使用OpenFeign来使用

    服务提供者:只是简单的boot,没有使用Cloud 服务调用者: 启动服务调用者 和 启动服务提供者 请求:lo...

  • 第三篇 服务提供者和服务消费者

    一、服务提供者和服务消费者概念 服务提供者:服务的被调用方(即:为其他服务提供服务的服务)服务消费者: 服务的调用...

  • 微服务架构(四)注册中心的主要功能

    注册中心api 服务注册接口: 提供者调用此完成服务的注册 服务注销接口: 提供者调用此完成服务的注销 心跳汇报:...

  • HttpClient方式实现RPC远程调用

    问题: RPC,所谓远程调用,就是由服务消费者发起请求调用服务提供者中的方法完成功能处理,然后服务提供者再将执行结...

  • Dubbo架构

    架构 调用关系说明 服务容器负责启动,加载,运行服务提供者。 服务提供者在启动时,向注册中心注册自己提供的服务。 ...

  • Dubbo学习文档

    入门 - 架构 节点角色说明 调用关系说明 服务容器负责启动,加载,运行服务提供者。 服务提供者在启动时,向注册中...

  • springcloud5-resilience4j 熔断器

    简介 微服务结构中,服务调用其他服务,如果服务提供者不可用,会引起服务调用者不可用,进而引起整个调用链上所有的服务...

  • Spring-Cloud服务发现Eureka的服务调用详细入门教

    案例中有三个角色:服务注册中心、服务提供者、服务消费者,流程是首先启动注册中心,服务提供者生产服务并注册到服务中心...

网友评论

      本文标题:1.2-服务提供者调用流程

      本文链接:https://www.haomeiwen.com/subject/aiahlqtx.html