引入依赖

:::tips 在服务消费者中引入Feign的依赖 :::

  1. <!-- OpenFeign起步依赖 -->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-openfeign</artifactId>
  5. </dependency>

代码实现

编写代码

:::tips 在服务消费者中启动类所在的包下新建client包,编写XxxClient接口,接口上打上@FeignClient注解,并指定其value属性为需要调用的服务的名称

如果需要在此接口中所有的请求路径前再加一层路径,可以通过@FeignClient注解的path属性指定路径

然后在接口中编写抽象方法,指定我们需要调用的微服务的请求方式、请求路径、请求体等参数,也就是将服务提供者Controller类中需要调用的方法(带上@GetMapping、@PostMapping等注解,注意保持完整的请求路径)复制过来改造为抽象方法

注意:

  • 如果是Get请求,需要使用@RequestParam注解来绑定普通参数(注意非必传的参数配置@RequestParam注解的required属性为false),并指定@RequestParam注解的value属性为参数名称
  • 不管是什么请求方式,都需要使用绑定参数的注解来设置参数名称 ::: ```java @FeignClient(value = “服务提供者的名称”) public interface XxxClient {

    @GetMapping(“请求路径”) public 返回值 方法名(@注解(绑定参数名) 请求参数);

}

  1. <a name="nroNx"></a>
  2. ### 启动类注解
  3. :::tips
  4. 在服务消费者的启动类上需要打上@EnableFeignClients注解,用来扫描打上了@FeignClient注解的接口
  5. 注意如果接口不在启动类所在的包及其子包下,需要指定注解的basePackages或clients属性
  6. - 方式一:指定Feign扫描的包全路径(推荐)
  7. - @EnableFeignClients(basePackages = "com.xujiahao")
  8. - 方式二:指定需要加载的Client接口
  9. - @EnableFeignClients(clients = {XxxClient.class})
  10. :::
  11. ```java
  12. //扫描打上了@FeignClient注解的接口
  13. @EnableFeignClients(basePackages = "com.xujiahao")
  14. @SpringBootApplication
  15. public class XxxApplication{
  16. public static void main(String[] args){
  17. SpringApplication.run(XxxApplication.class,args);
  18. }
  19. }

调用

:::tips 在服务消费者中需要调用服务提供者API的类中注入我们编写的接口,然后在方法中调用注入对象的方法 :::

  1. @SpringBootTest
  2. public class MyTest{
  3. //注入我们编写的接口
  4. @Autowired
  5. private XxxClient xxxClient;
  6. @Test
  7. public void test(){
  8. //没有返回值就不用接收
  9. 返回值 对象名 = xxxClient.方法名(请求参数);
  10. }
  11. }