在 Eureka 中调用 ServiceInstance 的 getScheme() 方法时总是返回 null 的原因

AUTHOR | nicechi
类别 | Eureka
发表 | 2021-06-06 12:10:27
更新 | 2021-06-06 12:10:27

在 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 


CATEGORY

TOP