• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

java语言中Nacos注册中心:Client端【获取所有服务请求】

武飞扬头像
juejin
帮助299

前言

java语言中Nacos注册中心:Client端【获取所有服务请求】

0. 环境

  • nacos版本:1.4.1
  • Spring Cloud : 2020.0.2
  • Spring Boot :2.4.4
  • Spring Cloud alibaba: 2.2.5.RELEASE

测试代码:github.com/hsfxuebao/s…

1. 获取所有服务

入口方法:org.springframework.cloud.client.discovery.health.DiscoveryClientHealthIndicator#health:

@Override
public Health health() {
   Health.Builder builder = new Health.Builder();

   if (this.discoveryInitialized.get()) {
      try {
         DiscoveryClient client = this.discoveryClient.getIfAvailable();
         String description = (this.properties.isIncludeDescription()) ? client.description() : "";

         if (properties.isUseServicesQuery()) {
            // todo
            List<String> services = client.getServices();
            builder.status(new Status("UP", description)).withDetail("services", services);
         }
         else {
            client.probe();
            builder.status(new Status("UP", description));
         }
      }
      catch (Exception e) {
         this.log.error("Error", e);
         builder.down(e);
      }
   }
   else {
      builder.status(new Status(Status.UNKNOWN.getCode(), "Discovery Client not initialized"));
   }
   return builder.build();
}

com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery#getServices:

public List<String> getServices() throws NacosException {
   String group = discoveryProperties.getGroup();
   ListView<String> services = namingService().getServicesOfServer(1,
         Integer.MAX_VALUE, group);
   return services.getData();
}

com.alibaba.nacos.client.naming.net.NamingProxy#getServiceList(int, int, java.lang.String, com.alibaba.nacos.api.selector.AbstractSelector)

public ListView<String> getServiceList(int pageNo, int pageSize, String groupName, AbstractSelector selector)
        throws NacosException {
    
    Map<String, String> params = new HashMap<String, String>(4);
    params.put("pageNo", String.valueOf(pageNo));
    params.put("pageSize", String.valueOf(pageSize));
    params.put(CommonParams.NAMESPACE_ID, namespaceId);
    params.put(CommonParams.GROUP_NAME, groupName);
    
    if (selector != null) {
        switch (SelectorType.valueOf(selector.getType())) {
            case none:
                break;
            case label:
                ExpressionSelector expressionSelector = (ExpressionSelector) selector;
                params.put("selector", JacksonUtils.toJson(expressionSelector));
                break;
            default:
                break;
        }
    }
    // todo GET请求
    String result = reqApi(UtilAndComs.nacosUrlBase   "/service/list", params, HttpMethod.GET);
    
    JsonNode json = JacksonUtils.toObj(result);
    ListView<String> listView = new ListView<String>();
    listView.setCount(json.get("count").asInt());
    listView.setData(JacksonUtils.toObj(json.get("doms").toString(), new TypeReference<List<String>>() {
    }));
    
    return listView;
}

获取所有服务:GET请求 url:/nacos/v1/ns/service/list

2. 方法调用图

image.png

 

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanehic
系列文章
更多 icon
同类精品
更多 icon
继续加载