dubbo mock/local/stub 功能


stub=true or default

设为true/default,表示使用缺省代理类名,即:接口名 + Local后缀,服务接口客户端本地代理类名,用于在客户端执行本地逻辑,如本地缓存等,该本地代理类的构造函数必须允许传入远程代理对象,构造函数如:public XxxServiceLocal(XxxService xxxService)

mock=true or default 

设为true/default,表示使用缺省Mock类名,即:接口名 + Mock后缀,服务接口调用失败Mock实现类,该Mock类必须有一个无参构造函数,与Local的区别在于,Local总是被执行,而Mock只在出现非业务异常(比如超时,网络异常等)时执行,Local在远程调用之前执行,Mock在远程调用后执行。

源码里还有一个local参数,和 stub等价,但是被 deprecated 了

dubbo mock/local/stub 功能_第1张图片


StubProxyFactoryWrapper 

处理  stub/local , 以下代码不清楚意图,难道只是为了改个变量名

String stub = invoker.getUrl().getParameter(Constants.STUB_KEY, invoker.getUrl().getParameter(Constants.LOCAL_KEY));


StubProxyFactoryWrapper 是 proxyFactory的 wrapper类,所以 stub类总是被执行. 


 MockClusterInvoker

 处理 mock ,  MockClusterWrapper 里调用了 MockClusterInvoker,MockClusterWrapper 是Cluster 的 wrapper类,理解 ExtensionLoader 的 cachedWrapperClasses 很重要。

Cluster的配置只在consumer端生效,所以mock、stub、local参数也只在consumer端生效,可以跟踪下 RegistryDirectory.mergeUrl。 但是 service 和 consumer端都会做检查。checkStubAndMock(interfaceClass); 


参考 : read: https://www.jianshu.com/p/ce8de35986cf

你可能感兴趣的:(dubbo mock/local/stub 功能)