最近开发中遇到一个问题:
服务已经注册到nacos中了,但是Feign不能通过服务名调用接口。
客户端的代码:
@FeignClient(name = "user-service", decode404 = true)
public interface SysUserClient {
@GetMapping(value = "/getCurrentUser")
String getCurrentUser();
}
异常信息:
java.lang.AbstractMethodError: org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.choose()
后来,我在后面加上url = "http://localhost:8081"就可以了:
@FeignClient(name = "user-service", decode404 = true,url = "http://localhost:8081")
public interface SysUserClient {
@GetMapping(value = "/getCurrentUser")
String getCurrentUser();
}
保持着不懂就百度的姿势,没有找到解决的方案,但是受到了一点启发,版本没对上。
最后看一下依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
和
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
这两个依赖spring-cloud-alibaba-nacos-discovery和spring-cloud-starter-alibaba-nacos-discovery的区别:一个多了starter,一个少了starter。
百度一下这两货的区别:
如果你已经升级到 Spring Boot 版本大于等于2.3.0,那么你应该使用 Spring Cloud Alibaba 的最新版本,即 spring-cloud-starter-alibaba-nacos-discovery 的最新版本。