文章目录
- 准备
- 一、引入必要依赖
- 二、写一个feign client并暴露到注册中心
- 2.1 client
- 2.2 开启Feign客户端功能
- 三、别的服务引入IProductClient并调用方法
- 3.1 建一个order-service,引入IProductClient所在模块
- 3.2 注入IProductClient,并调用方法
- 四、启动服务
- 五、启动两个服务,访问端口
- 六、目录结构
准备
- 父工程pom文件参考spring-boot、spring-cloud、spring-cloud-alibaba的常用依赖的依赖声明及pom文件
- springboot整合nacos参考springboot整合nacos
一、引入必要依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
二、写一个feign client并暴露到注册中心
2.1 client
对应的controller方法为
@RestController
@RequestMapping("/product")
public class ProductController {
@GetMapping("/list")
public String list(){
return "product list";
}
}
IProductClient
,用来让别的服务可以调用ProductController的对应方法。
value
对应的是服务名
@FeignClient(value = "product-service",path = "/product")
public interface IProductClient {
@GetMapping("/list")
public String list();
}
2.2 开启Feign客户端功能
@EnableFeignClients(basePackages = "com.hdl.client")
否则会报错,bean找不到
Field productClient in com.hdl.controller.OrderController required a bean of type 'com.hdl.client.IProductClient' that could not be found.
三、别的服务引入IProductClient并调用方法
3.1 建一个order-service,引入IProductClient所在模块
微服务端口号为8081,并将order-service注册到nacos上,这个步骤省略;
引入IProductClient所在模块,不用引openfeign,因为引入这个依赖,那么openfeign已经在classpath下了
<dependency>
<groupId>org.example</groupId>
<artifactId>product-service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
3.2 注入IProductClient,并调用方法
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
IProductClient productClient;
@GetMapping("/list")
public String list(){
String list = productClient.list();
return list +" order list";
}
}
四、启动服务
启动order-service
时可能会出现以下错误
Caused by: java.lang.IllegalStateException: No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?
原因是:SpringCloud Feign
在Hoxton.M2 RELEASED
版本之后不再使用Ribbon
而是使用spring-cloud-loadbalancer
,所以不引入spring-cloud-loadbalancer
会报错。
解决方法:引入spring-cloud-loadbalancer
并且排除掉nacos
中的Ribbon
依赖(但是我这里,没有排除ribbon依赖也可以)
在order-service
中引入
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
五、启动两个服务,访问端口
发现feign远程调用成功了