apollo重要服務之metaService

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
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章