在 Eureka 中调用 ServiceInstance 的 getScheme() 方法时,你可能会发现其返回值总是为 null
这是因为 Eureka 的 ServiceInstance 实现类 —— org.springframework.cloud.netflix.eureka.EurekaDiscoveryClient.EurekaServiceInstance 并没有实现此方法,其 ServiceInstance 接口的源码如下所示:
public interface ServiceInstance {
String getServiceId();
String getHost();
int getPort();
boolean isSecure();
URI getUri();
Map<String, String> getMetadata();
default String getScheme() {
return null;
}
}
从上述的源码中可以看到,ServiceInstance 接口的 getScheme() 方法是一个 default 实现,在这个实现当中,其返回值总是为 null,所以 Eureka 在实现此接口的时候就可以无需实现 getScheme() 方法
为了获取到 URI 所使用的 Scheme ,可以先通过 getUri() 来获取到指定服务的 URI,然后再从这个 URI 中来提取 Scheme