文章目录
- 准备
- 一、引入必要依赖
- 二、写一个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远程调用成功了
 
六、目录结构




















