UnknownHostException: xxx restTemplate无法通过服务名调用服务/@LoadBalanced注解失效

最近在构建项目时出现一个问题,由于是从旧的项目复制部分依赖过来的。出现了一个restTemplate无法通过服务名调用服务的问题。新的项目使用的springboot是2.1.4的。

1、错误的分析:

场景:

RestTemplate上有加入 @Bean和@LoadBalanced注解,注入正常。但仍然无法通过服务名(http://服务名/v1/接口)调用服务,报错UnknownHostException,经测试通过ip端口的形式(http://localhost:8081/v1/接口)却可以调用服务的接口。

分析结果:

服务eureka服务名没有注册上,所以无法通过服务名获取。(方向错了,浪费好多时间)

2、正确的分析:

场景:

报错路径显示的是:http://服务名/v1/接口
查询相关底层原理发现(参考:springCloud的RestTemplate+@LoadBalanced注解实现负载均衡源码分析):@LoadBalanced起到标记作用,当服务启动时RestTemplate对象里面就会被自动加入LoadBalancerInterceptor拦截器,拦截器中会进行路径解析,通过serviceId和Rule解析返回为IP:port形式的信息的Server
也就是说:我的报错路径显示的仍是http://服务名/v1/接口,说明我的@LoadBalanced没有生效,服务名未被解析为ip和端口的形式。所以定位问题到ribbon的依赖版本问题。

去maven中央仓库查看我自身的依赖,发现已过期。
在这里插入图片描述
将原本的依赖

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-ribbon</artifactId>
			<version>1.3.5.RELEASE</version>
		</dependency>

修改为spring对应版本的依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
            <version>2.1.4.RELEASE</version>
        </dependency>

完美解决问题。

我自己在构建这个项目的时候,踩了挺多坑,由于懒,直接拷贝pom依赖过来,然后发现大多问题都是版本依赖的问题。如你们有人在做这种构建任务时遇到项目奇奇怪怪的问题,那多半是依赖的版本问题了。
以上

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值