美文网首页Apollo分布式配置中心
apollo重要服务之metaService

apollo重要服务之metaService

作者: yeren108 | 来源:发表于2018-08-14 10:29 被阅读435次

      metaService这个服务是用来提供“元服务”的,我们可以看到源码中只有一个DiscoveryService和一个ServiceController,DiscoveryService封装了三个方法,通过EurekaClient分别获取

    Admin Service服务列表(IP+Port)
    Config Service服务列表(IP+Port)
    meta Service服务列表(IP+Port)

    我们来看一下其中一个方法:

    public List<InstanceInfo> getMetaServiceInstances() {
        Application application = eurekaClient.getApplication(ServiceNameConsts.APOLLO_METASERVICE);
        if (application == null) {
          Tracer.logEvent("Apollo.EurekaDiscovery.NotFound", ServiceNameConsts.APOLLO_METASERVICE);
        }
        return application != null ? application.getInstances() : Collections.emptyList();
      }
    

    返回的是应用实例信息。而ServiceController则是进一步封装,提供3个接口获取服务信息。接口信息如下:

    http://localhost:8080/services/meta
    返回值:[]
    
    http://localhost:8080/services/admin
    返回值:
    [
        {
            "appName": "APOLLO-ADMINSERVICE",
            "instanceId": "HQ-PAB41602.sdb.local:apollo-adminservice:8090",
            "homepageUrl": "http://172.16.3.147:8090/"
        }
    ]
    
    这个接口是获取adminService服务的接口
    
    http://localhost:8080/services/config
    返回值:
    [
        {
            "appName": "APOLLO-CONFIGSERVICE",
            "instanceId": "HQ-PAB41602.sdb.local:apollo-configservice:8080",
            "homepageUrl": "http://172.16.3.147:8080/"
        }
    ]
    

    同样的我们看一下其中一个方法:

    @RequestMapping("/meta")
      public List<ServiceDTO> getMetaService() {
        List<InstanceInfo> instances = discoveryService.getMetaServiceInstances();
        List<ServiceDTO> result = instances.stream().map(new Function<InstanceInfo, ServiceDTO>() {
    
          @Override
          public ServiceDTO apply(InstanceInfo instance) {
            ServiceDTO service = new ServiceDTO();
            service.setAppName(instance.getAppName());
            service.setInstanceId(instance.getInstanceId());
            service.setHomepageUrl(instance.getHomePageUrl());
            return service;
          }
        }).collect(Collectors.toList());
        return result;
      }
    

    仅仅是提供了一个简单的封装而已。

      Meta Server从Eureka获取metaService,Config Service和Admin Service的服务信息,相当于是一个Eureka Client。
      增设一个Meta Server的角色主要是为了封装服务发现的细节,对Portal和Client而言,永远通过一个Http接口获取Admin Service和Config Service的服务信息,而不需要关心背后实际的服务注册和发现组件。
      Meta Server只是一个逻辑角色,在部署时和Config Service是在一个JVM进程中的,所以IP、端口和Config Service一致。
      由于和Config Service部署在一个JVM中,所以相应的metaService也是都是多实例、无状态部署,保证了服务的高可用性。

    相关文章

      网友评论

        本文标题:apollo重要服务之metaService

        本文链接:https://www.haomeiwen.com/subject/gwsmbftx.html