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

河北秦皇岛建设局网站wordpress页面立体效果

河北秦皇岛建设局网站,wordpress页面立体效果,长沙推广网络营销公司,企业邮箱下载安装本文收录于专栏 Nacos 中 。 文章目录 前言确定前端路由CatalogController.listDetail()ServiceManager总结 前言 前文我们分析了Nacos中客户端注册时数据分发的设计链路#xff0c;本文根据Nacos前端页面请求#xff0c;看下前端页面中的服务列表的数据源于哪里。 确定前端…本文收录于专栏 Nacos 中 。 文章目录 前言确定前端路由CatalogController.listDetail()ServiceManager总结 前言 前文我们分析了Nacos中客户端注册时数据分发的设计链路本文根据Nacos前端页面请求看下前端页面中的服务列表的数据源于哪里。 确定前端路由 我们已经向Nacos中注册了一个服务现在去前端确定查询的路由是什么 确定前端请求路由/nacos/v1/ns/catalog/services 通过路由确定后端代码位置 package com.alibaba.nacos.naming.controllers; CatalogController.listDetail()CatalogController.listDetail() /*** List service detail information.** param withInstances whether return instances* param namespaceId namespace id* param pageNo number of page* param pageSize size of each page* param serviceName service name* param groupName group name* param containedInstance instance name pattern which will be contained in detail* param hasIpCount whether filter services with empty instance* return list service detail*/ Secured(action ActionTypes.READ) GetMapping(/services) public Object listDetail(RequestParam(required false) boolean withInstances,RequestParam(defaultValue Constants.DEFAULT_NAMESPACE_ID) String namespaceId,RequestParam(required false) int pageNo, RequestParam(required false) int pageSize,RequestParam(name serviceNameParam, defaultValue StringUtils.EMPTY) String serviceName,RequestParam(name groupNameParam, defaultValue StringUtils.EMPTY) String groupName,RequestParam(name instance, defaultValue StringUtils.EMPTY) String containedInstance,RequestParam(required false) boolean hasIpCount) throws NacosException {//前端withInstances传的是false,不走这个分支if (withInstances) {return judgeCatalogService().pageListServiceDetail(namespaceId, groupName, serviceName, pageNo, pageSize);}//确定是走的这里获取的服务列表return judgeCatalogService().pageListService(namespaceId, groupName, serviceName, pageNo, pageSize, containedInstance, hasIpCount); }查看judgeCatalogService().pageListService(namespaceId, groupName, serviceName, pageNo, pageSize, containedInstance, hasIpCount);的实现 Override public Object pageListService(String namespaceId, String groupName, String serviceName, int pageNo, int pageSize,String instancePattern, boolean ignoreEmptyService) throws NacosException {ObjectNode result JacksonUtils.createEmptyJsonNode();ListServiceView serviceViews new LinkedList();//获取服务列表CollectionService services patternServices(namespaceId, groupName, serviceName);if (ignoreEmptyService) {services services.stream().filter(each - 0 ! serviceStorage.getData(each).ipCount()).collect(Collectors.toList());}result.put(FieldsConstants.COUNT, services.size());services doPage(services, pageNo - 1, pageSize);for (Service each : services) {ServiceMetadata serviceMetadata metadataManager.getServiceMetadata(each).orElseGet(ServiceMetadata::new);ServiceView serviceView new ServiceView();serviceView.setName(each.getName());serviceView.setGroupName(each.getGroup());serviceView.setClusterCount(serviceStorage.getClusters(each).size());serviceView.setIpCount(serviceStorage.getData(each).ipCount());serviceView.setHealthyInstanceCount(countHealthyInstance(serviceStorage.getData(each)));serviceView.setTriggerFlag(isProtectThreshold(serviceView, serviceMetadata) ? true : false);serviceViews.add(serviceView);}result.set(FieldsConstants.SERVICE_LIST, JacksonUtils.transferToJsonNode(serviceViews));return result; }private CollectionService patternServices(String namespaceId, String group, String serviceName) {boolean noFilter StringUtils.isBlank(serviceName) StringUtils.isBlank(group);if (noFilter) {//我们前端默认传的这两个参数都是空所以会走这里的逻辑return ServiceManager.getInstance().getSingletons(namespaceId);}CollectionService result new LinkedList();StringJoiner regex new StringJoiner(Constants.SERVICE_INFO_SPLITER);regex.add(getRegexString(group));regex.add(getRegexString(serviceName));String regexString regex.toString();for (Service each : ServiceManager.getInstance().getSingletons(namespaceId)) {if (each.getGroupedServiceName().matches(regexString)) {result.add(each);}}return result; }ServiceManager.getInstance()这里一看就是一个经典的单例写法那我们接下来把精力放到getSingletons这个方法上。 namespaceId默认是public。 ServiceManager public SetService getSingletons(String namespace) {return namespaceSingletonMaps.getOrDefault(namespace, new HashSet(1)); }通过代码我们发现获取制定namespace下的服务是从一个map中获取的。 /*** Nacos service manager for v2.** author xiweng.yy*/ public class ServiceManager {private static final ServiceManager INSTANCE new ServiceManager();private final ConcurrentHashMapService, Service singletonRepository;private final ConcurrentHashMapString, SetService namespaceSingletonMaps;//... }我们可以发现ServiceManager这个类是一个单例模式的实现其中维护了两个map其中一个namespaceSingletonMaps用于存放制定namespace下的服务那么这个map中的数据是在什么时机存放进去的呢 /**1. Get singleton service. Put to manager if no singleton.2. 3. param service new service4. return if service is exist, return exist service, otherwise return new service*/ public Service getSingleton(Service service) {singletonRepository.computeIfAbsent(service, key - {NotifyCenter.publishEvent(new MetadataEvent.ServiceMetadataEvent(service, false));return service;});Service result singletonRepository.get(service);namespaceSingletonMaps.computeIfAbsent(result.getNamespace(), namespace - new ConcurrentHashSet());namespaceSingletonMaps.get(result.getNamespace()).add(result);return result; }观察代码我们发现往map中写数据的只有这一个方法那么这个方法是在什么时机被调用的呢 我们重新梳理之前客户端注册的部分逻辑 InstanceRequestHandler接收所有实例注册、注销相关的请求InstanceRequestHandler处理注册请求时会调用EphemeralClientOperationServiceImpl中的registerInstance方法registerInstance方法中除了我们之前讲的发布客户端服务注册事件ClientOperationEvent.ClientRegisterServiceEvent之外还会往ServiceManager中的map添加数据 registerInstance方法对ServiceManager的处理逻辑如下 Service singleton ServiceManager.getInstance().getSingleton(service);总结 通过以上梳理我们知道了前端服务列表中获取的数据是源于ServiceManager类中一个map的缓存缓存中的数据是在客户端服务注册时添加进去的。 先梳理脉络然后以点到面一切都会逐渐清晰。
http://www.yayakq.cn/news/3753/

相关文章:

  • 免费网站优化排名网络营销推广方案案例视频
  • 中国建设教育协会证书查询网站深圳返利网站建设
  • 做电子签章登录哪个网站PHP是做网站最好的
  • 缤纷网站免费做服装方法网站目录
  • 专门做排行的网站南宁高端网站建设公司
  • 哪个网站能把图片拼凑起来做gif的哪个全球购网站做的好处
  • 汕头哪里学网站建设最好网络营销活动策划方案
  • 网站左侧悬浮代码佛山网站改版
  • 建设网站要注册公司吗做网站网页挣钱不
  • 如何做视频卖给网站石家庄二手房
  • 义网站建设推荐郑国华网站开发要学什么语言
  • 微信网站制作企业如何上传到网站根目录
  • flashfxp 上传网站模板之家官网中文
  • 广州住房和城乡建设部网站建设网站教程全集
  • 哪个网站可以做图片多个网站 备案
  • 东阿网站建设公司亿星网站建设
  • 聊城网站建设推广wordpress搭建视频
  • 开源镜像网站怎么做网页视频下载ios
  • 怎么建设网站最便宜公司网站简介怎么做
  • 云南省文山州网站建设怎么在网上卖东西?
  • 武进网站建设市场艺术字体在线生成器毛笔字
  • 云南建网站需要多少钱网站制作的方法
  • 杭州网站开发企业企业建设网站的主要目的有哪些
  • 有的网站为什么打不开怎么回事建网站需要多少钱选苏州聚尚网络
  • 设计做的好看的网站有哪些如何制作一个企业网站
  • 网站的统计代码网站在线咨询模块
  • 网页和网站淄博网站制作定制优化
  • 网站建设合同司法解释深圳全网营销方案
  • 国外红色企业网站php网站上做微信支付功能
  • 网站建设研究学生管理系统网站