dubbo 源码解析 4

作者: 想54256 | 来源:发表于2020-05-28 16:24 被阅读0次

    title: dubbo 源码解析 4
    date: 2020/05/27 16:45


    本节内容

    远程服务调用(注册中心版)

    远程服务调用

    通过协议对象获取服务调用端的 invoker

    官方的注释好像写错了,经过测试多个服务提供者不会走 else。

    image image

    剩下的代码如下:

    image

    因为与集群有关,所以暂时不看了。

    然后这个方法返回 invoker 对象,剩下的流程和本地的一样,创建一个代理对象。

    我们着重看一下下面这行代码

    // 订阅 providers、configurators、routers 等节点数据
    directory.subscribe(subscribeUrl.addParameter(Constants.CATEGORY_KEY,
            Constants.PROVIDERS_CATEGORY
                    + "," + Constants.CONFIGURATORS_CATEGORY
                    + "," + Constants.ROUTERS_CATEGORY));
    
    image image 注:当启动了 2 个服务提供者时,会触发两次监听器,最终 invokers 中有了两个 dubbo Invoker image image image image image image.png image image image

    tag1 doOpen();

    image

    tag2 connect();

    image

    以上内容就是 DemoService demoService = (DemoService) context.getBean("demoService"); 这句话调用的,因为 FactoryBean 对象只有在使用到的时候才会调用 getObject() 方法。

    服务调用

    下面开始介绍调用方法(demoService.sayHello("world"))时的流程:

    image

    invoker.toString():interface com.alibaba.dubbo.demo.DemoService2 -> zookeeper://127.0.0.1:2181/com.alibaba.dubbo.registry.RegistryService?anyhost=true&application=demo-consumer&bean.name=com.alibaba.dubbo.demo.DemoService2&check=false&dubbo=2.0.2&generic=false&interface=com.alibaba.dubbo.demo.DemoService2&methods=sayHello&pid=31924&qos.port=33333&register.ip=192.168.2.89&remote.timestamp=1591148261144&side=consumer&timestamp=1591149268097

    image 中间和之前相同的流程还有过滤器我就跳过了 注意:如果有多个服务提供者 FailoverClusterInvoker 会从中选择一个 中间就是对请求进行封装,封装方法名,方法参数类型,方法参数等信息 因为我们在创建 NettyClient 的时候添加了这个处理器,所以在发送请求前和响应到来时都会调用这个处理器的方法 image

    然后就是发送请求,服务提供者接收请求,然后进行处理,这些上节我们已经讲过了。

    相关文章

      网友评论

        本文标题:dubbo 源码解析 4

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