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人點贊
作者:yeren108
鏈接:https://www.jianshu.com/p/12ae8455d48a
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。