13 - 本地服务引用(Injvm)

腾一部分笔记到csdn

 

1. 概述

Dubbo 服务引用,和 Dubbo 服务暴露一样有两种方式:
 
// 推荐
< dubbo:reference  scope = "local"  />
// 不推荐使用,准备废弃
< dubbo: reference  injvm = "true"  />
< dubbo: reference  scope = "remote"  />
 

2. createProxy

本地引用服务的顺序图如下:
 
13 - 本地服务引用(Injvm)_第1张图片
 
在 4* - API 配置(三)之服务消费者 一文中,我们看到 ReferenceConfig#init() 方法中,会在配置初始化完成后,调用 #createProxy(map) 方法生成对象。本地引用时
invoker = refprotocol.refer(interfaceClass, url); //获取invoker,从这句开始分析
 
invoker = refprotocol.refer(interfaceClass, url); //获取invoker
    -> return new InjvmInvoker<T>(serviceType, url, url.getServiceKey(), exporterMap);
 
        @Override
        public Result doInvoke(Invocation invocation) throws Throwable {
            // 获得 Exporter 对象
            Exporter<?> exporter= InjvmProtocol.getExporter(exporterMap, getUrl());
            if (exporter == null) {
                throw new RpcException("Service ["+ key + "] not found.");
            }
            // 设置服务提供者地址为本地
            RpcContext.getContext().setRemoteAddress(NetUtils.LOCALHOST, 0);
            // 调用
            return exporter.getInvoker().invoke(invocation);
        }
        //Invoker这个invoker就是暴露时创建的 Invoker里面包类似springmvcWapper
 
 

 

你可能感兴趣的:(dubbo)