当前位置: 首页 > news >正文

openshift 做网站网站后台有些不显示

openshift 做网站,网站后台有些不显示,国外服装定制网站,查询数据的网站怎么做基于Dubbo 3.1#xff0c;详细介绍了Dubbo服务的发布与引用的源码。 此前我们学习了调用createProxy方法#xff0c;根据服务引用参数map创建服务接口代理引用对象的整体流程#xff0c;我们知道会调用createInvokerForRemote方法创建远程引用Invoker#xff0c;这是Dubbo … 基于Dubbo 3.1详细介绍了Dubbo服务的发布与引用的源码。 此前我们学习了调用createProxy方法根据服务引用参数map创建服务接口代理引用对象的整体流程我们知道会调用createInvokerForRemote方法创建远程引用Invoker这是Dubbo 3 服务引用的核心方法我们现在来接着学习createInvokerForRemote方法。 Dubbo 3.x服务引用源码 Dubbo 3.x源码(11)—Dubbo服务的发布与引用的入口Dubbo 3.x源码(18)—Dubbo服务引用源码(1)Dubbo 3.x源码(19)—Dubbo服务引用源码(2)Dubbo 3.x源码(20)—Dubbo服务引用源码(3) Dubbo 3.x服务发布源码 Dubbo 3.x源码(11)—Dubbo服务的发布与引用的入口Dubbo 3.x源码(12)—Dubbo服务发布导出源码(1)Dubbo 3.x源码(13)—Dubbo服务发布导出源码(2)Dubbo 3.x源码(14)—Dubbo服务发布导出源码(3)Dubbo 3.x源码(15)—Dubbo服务发布导出源码(4)Dubbo 3.x源码(16)—Dubbo服务发布导出源码(5)Dubbo 3.x源码(17)—Dubbo服务发布导出源码(6) 文章目录 1 createInvokerForRemote创建远程引用Invoker2 Protocol$Adaptive自适应Protocol3 ProtocolSerializationWrapper协议序列化包装器4 ProtocolFilterWrapper协议过滤器包装器5 ProtocolListenerWrapper协议监听器包装器6 总结 1 createInvokerForRemote创建远程引用Invoker 远程引用或者直连引用情况下将会调用该方法创建远程引用Invoker。该方法对于一个注册中心url和多个注册中心url的处理不一样我们仅看一个注册中心的情况。 一个注册中心的情况下该方法主要逻辑就是执行protocolSPI.refer方法通过协议protocolSPI引用服务Invoker。 这里的protocolSPI是Protocol的自适应扩展实现即Protocol$Adaptive将会根据url的协议选择Protocol实现然后调用Protocol#refer方法引用服务。 我们下面主要看protocolSPI#refer方法方法的相关源码这也是Dubbo服务引入的核心流程之一。 /*** ReferenceConfig的方法* p* 创建远程引用Invoker*/ SuppressWarnings({unchecked, rawtypes}) private void createInvokerForRemote() {//一个url表示一个注册中心或者直连地址这是大多数情况//url例如 registry://47.94.229.245:2181/org.apache.dubbo.registry.RegistryService?REGISTRY_CLUSTERdemo1applicationdemo-consumerdubbo2.0.2pid34457registryzookeepertimeout20000timestamp1666854892012if (urls.size() 1) {//获取注册中心协议urlURL curUrl urls.get(0);/** 通过协议protocolSPI引用服务该方法固定返回InjvmInvoker实例内部没有NettyClient因为不需要发起网络调用** 这里的protocolSPI是Protocol的自适应扩展实现即Protocol$Adaptive* 将会根据url的协议选择Protocol实现然后调用Protocol#refer方法引用服务*/invoker protocolSPI.refer(interfaceClass, curUrl);// registry url, mesh-enable and unloadClusterRelated is true, not need Cluster.//如果是registry url非直连地址, 或者unloadClusterRelated为true那么不需要Cluster否则需要Cluster包装//对于远程注册中心协议来说在protocolSPI.refer方法中就已经进行了Cluster包装这里不再需要了if (!UrlUtils.isRegistry(curUrl) !curUrl.getParameter(UNLOAD_CLUSTER_RELATED, false)) {ListInvoker? invokers new ArrayList();invokers.add(invoker);invoker Cluster.getCluster(scopeModel, Cluster.DEFAULT).join(new StaticDirectory(curUrl, invokers), true);}}//多个url表示多个注册中心或者直连地址else {ListInvoker? invokers new ArrayList();URL registryUrl null;for (URL url : urls) {// For multi-registry scenarios, it is not checked whether each referInvoker is available.// Because this invoker may become available later.invokers.add(protocolSPI.refer(interfaceClass, url));if (UrlUtils.isRegistry(url)) {// use last registry urlregistryUrl url;}}if (registryUrl ! null) {// registry url is available// for multi-subscription scenario, use zone-aware policy by defaultString cluster registryUrl.getParameter(CLUSTER_KEY, ZoneAwareCluster.NAME);// The invoker wrap sequence would be: ZoneAwareClusterInvoker(StaticDirectory) - FailoverClusterInvoker// (RegistryDirectory, routing happens here) - Invokerinvoker Cluster.getCluster(registryUrl.getScopeModel(), cluster, false).join(new StaticDirectory(registryUrl, invokers), false);} else {// not a registry url, must be direct invoke.if (CollectionUtils.isEmpty(invokers)) {throw new IllegalArgumentException(invokers null);}URL curUrl invokers.get(0).getUrl();String cluster curUrl.getParameter(CLUSTER_KEY, Cluster.DEFAULT);invoker Cluster.getCluster(scopeModel, cluster).join(new StaticDirectory(curUrl, invokers), true);}} }2 Protocol$Adaptive自适应Protocol Protocol$Adaptive的refer方法将会根据url的协议基于Dubbo SPI机制选择Protocol实现然后调用Protocol#refer方法引用服务默认dubbo协议。 /*** Protocol$Adaptive的方法* 基于url协议参数的自适应引用服务** param arg0 服务class* param arg1 远程服务的url地址* return Invoker*/ public org.apache.dubbo.rpc.Invoker refer(java.lang.Class arg0, org.apache.dubbo.common.URL arg1) throws org.apache.dubbo.rpc.RpcException {if (arg1 null) throw new IllegalArgumentException(url null);org.apache.dubbo.common.URL url arg1;//获取url协议作为扩展名默认dubboString extName (url.getProtocol() null ? dubbo : url.getProtocol());if (extName null)throw new IllegalStateException(Failed to get extension (org.apache.dubbo.rpc.Protocol) name from url ( url.toString() ) use keys([protocol]));ScopeModel scopeModel ScopeModelUtil.getOrDefault(url.getScopeModel(), org.apache.dubbo.rpc.Protocol.class);//基于DUbbo SPI机制查找指定扩展名的Protocol实现类默认DubboProtocol这里会进行wrapper包装org.apache.dubbo.rpc.Protocol extension (org.apache.dubbo.rpc.Protocol) scopeModel.getExtensionLoader(org.apache.dubbo.rpc.Protocol.class).getExtension(extName);//通过具体的Protocol包装实现类的refer方法实现服务的引用return extension.refer(arg0, arg1); } 同服务导出时一样获取Protocol的时候将会经过wrapper的包装。以InjvmProtocol协议为例可以看到经过了三层包装调用时由外向内调用即ProtocolSerializationWrapper - ProtocolFilterWrapper - ProtocolListenerWrapper - InjvmProtocol具体的Protocol实现。实际上Dubbo正式采用warpper机制和装饰设计模式实现类似aop的功能。 本地引入的injvm协议对应InjvmProtocol需要引入远程接口级注册中心的registry对应InterfaceCompatibleRegistryProtocol需要引入远程应用级注册中心的service-discovery-registry对应RegistryProtocol。 下面我们分别讲解这些wrapper和protocol是如何进行服务引入的 3 ProtocolSerializationWrapper协议序列化包装器 protocol的最外层wrapper它仅会在导出服务的export方法中起作用在引入服务的refer方法中没有其他处理。 /*** ProtocolSerializationWrapper的方法*/ Override public T InvokerT refer(ClassT type, URL url) throws RpcException {//无特殊处理return protocol.refer(type, url); } 4 ProtocolFilterWrapper协议过滤器包装器 这个包装器首先会判断如果是注册中心的协议例如registry或者service-discovery-registry那么直接调用下一层refer方法。 否则获取服务url对应的Filter并且构建为一个InvokerChain对象返回内部包含了一个下层refer方法的Invoker和一条过滤器调用链。 /*** ProtocolFilterWrapper的方法*/ Override public T InvokerT refer(ClassT type, URL url) throws RpcException {//如果是注册中心的协议例如registry或者service-discovery-registry那么直接调用下一层refer方法if (UrlUtils.isRegistry(url)) {return protocol.refer(type, url);}//获取服务url对应的Filter并且构建为一个InvokerChain对象返回内部包含了一个下层refer方法的Invoker和一条过滤器调用链。FilterChainBuilder builder getFilterChainBuilder(url);return builder.buildInvokerChain(protocol.refer(type, url), REFERENCE_FILTER_KEY, CommonConstants.CONSUMER); }5 ProtocolListenerWrapper协议监听器包装器 这个包装器首先会判断如果是注册中心的协议例如registry或者service-discovery-registry那么直接调用下一层refer方法。 否则调用下一层refer方法获取返回的Invoker如果url不包含registry-cluster-type参数将返回的Invoker包装为ListenerInvokerWrapper内部包含了一个Invoker和一个监听器列表。 /*** ProtocolListenerWrapper的方法*/ Override public T InvokerT refer(ClassT type, URL url) throws RpcException {//如果是注册中心的协议例如registry或者service-discovery-registry那么直接调用下一层refer方法if (UrlUtils.isRegistry(url)) {return protocol.refer(type, url);}//调用下一层refer方法获取返回的InvokerInvokerT invoker protocol.refer(type, url);//如果url不包含registry-cluster-type参数if (StringUtils.isEmpty(url.getParameter(REGISTRY_CLUSTER_TYPE_KEY))) {//将返回的Invoker包装为ListenerInvokerWrapper内部包含了一个Invoker和一个监听器列表invoker new ListenerInvokerWrapper(invoker,Collections.unmodifiableList(ScopeModelUtil.getExtensionLoader(InvokerListener.class, invoker.getUrl().getScopeModel()).getActivateExtension(url, INVOKER_LISTENER_KEY)));}return invoker; }6 总结 本次我们学习了createInvokerForRemote方法中的Wrapper有哪些以及作用接下来我们将会的学习真正的本地、应用级别、接口级别的Protocol的引入逻辑。
http://www.dnsts.com.cn/news/154574.html

相关文章:

  • 专业建设 验收 网站长春网站建设方案推广
  • 公司网站手工优化怎么做易优cms插件
  • 凡科轻站小程序怎么样如何做明星的个人网站
  • 跨境电商到什么网站做网站域名费一年交多少
  • 局域网内做网站网站导航下拉菜单代码
  • 嘉兴网站建设搭建wordpress 资源文件
  • 青岛即墨网站开发软件下载
  • 扒站wordpress主题效果图网站无缝连接
  • 台州网站策划台州网站策划pinterest官网入口
  • asp建站软件网站怎么伪静态网站
  • wordpress 分类 文章数量网站关键词怎样做优化
  • 比特币做游戏币的网站淮北叶红军
  • 主机怎么做网站二次跳转凯里市黎升网络推广公司
  • 个人网站推广软件wordpress添加百度地图
  • 织梦绿色企业网站模板 苗木企业网站源码 dedecms5.7内核如何建设基层网站
  • .天津网站建设吉林省 网站建设
  • 快站科技免费连接wifi的软件
  • 潜江哪里做网站手机网站这么做链接
  • 做网站图片多少钱网站服务器速度对seo有什么影响?
  • 网站建设-上寻模板公司部门解散
  • 昌图门户网站微信小程序开发需要什么技能
  • 安溪建设局网站为我们搭建了这么好的平台
  • 淄博企业网站建设都兰县建设局交通局网站
  • 妇科医院手机网站源码企业网站名是什么意思
  • 建设部网站危险性较大兼职做一篇微信的网站
  • 白沟网站开发百度登录
  • 徐汇网站推广WordPress清除ID沉余
  • 山东济南建网站公司济源市城乡建设局网站
  • 点了网站域名会跳转上海商用厨房设计
  • 快手里做网站荣耀封面的视频网页版微信登不上去怎么回事