我今天想测试一下长链路调用的zipkin的调用链观察(A-B-C)(A-C)(A-B)(B-C)
其中有两个服务死活调不通一直提示unknownhostException
其中A-C,A-B都调不通,只有B-C可以调用。
问题就出在A-B这里
我在A服务中,查看了eureka上注册的服务发现是有B服务的,但是调用呢却又调不通,在这里A调C又没有问题
@Resource
private DiscoveryClient discoveryClient;
@GetMapping("/payment/discovery")
public Object getService(){
List<String> services = discoveryClient.getServices();
for(String service:services){
log.info("service:{}",service);
}
List<ServiceInstance> instances = discoveryClient.getInstances("cloud-payment-service".toUpperCase());
for(ServiceInstance instance:instances){
log.info("serviceId:{},host:{},scheme:{},uri:{}",instance.getServiceId(),
instance.getHost(),instance.getScheme(),instance.getUri());
}
return this.discoveryClient;
}
结论,问题疑似出现在:A是通过Ribbon+RestTmplate去调用的其他服务,但是我B是使用费OpenFeign,虽然B引入的pom文件中包含了eureka client(子包存在Ribbon和LoadBalance),按道理来讲调用是没有问题的,结果却依然无法调通。
最后我把B的OpenFeign改成了Ribbon+RestTmplate去调用,就可以了。