当前位置: 首页 > 工具软件 > apollo-server > 使用案例 >

apollo重要服务之metaService

麻宾白
2023-12-01

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也是都是多实例、无状态部署,保证了服务的高可用性。

 

0人点赞

 

apollo

 



作者:yeren108
链接:https://www.jianshu.com/p/12ae8455d48a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 类似资料: