关于微服务相互调用可能引起unknownhostException的原因之一

我今天想测试一下长链路调用的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去调用,就可以了。


版权声明:本文为nanke1006原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。