五、Spring Cloud Alibaba毕业版:使用Feign实现远程HTTP调用

(一)什么Feign

  • Feign是Netflix开源的声明式HTTP客户端(即声明一个接口,Feign就会自动的根据这个接口构造目标地址,并发送http请求)

(二)Feign的使用

1.添加依赖
       
            org.springframework.cloud
            spring-cloud-starter-openfeign
        
2.添加注解

在启动类上添加@EnableFeignClients注解

      @SpringBootApplication
      @MapperScan("com.people.dao.mapper")
      @EnableFeignClients
      public class OrderServiceApplication {
              public static void main(String[] args) {
                  SpringApplication.run(OrderServiceApplication .class, args);
              }
       }
3.创建feignclient

当getUserById方法被调用的时候,Feign就会构造出http://user-center/users/{id} 并且去请求,将返回来的结果转换成UserDTO

      @FeignClient(name = "user-service")  //name表示请求的服务名称
      public interface UserCenterFeignClient {
          @GetMapping("/users/{id}")
          UserDTO getUserById(@PathVariable Integer id);
      }

使用上和调用其他方法一样,注入后就可以使用

      @Autowired
      private UserServiceFeignClient userServiceFeignClient;

      @GetMapping("/testFeign/{id}")
      public UserDTO testFeign(@PathVariable Integer id){
          return this.userServiceFeignClient.findById(id);
      }

user-service端代码:

  @RestController
  @RequestMapping("/users")
  @Slf4j
  public class UserController {
      @Autowired
      private  UserService userService;

      @GetMapping("/{id}")
      public User findById(@PathVariable Integer id) {
          log.info("我被请求了...");
          return userService.findById(id);
      }
  }

启动项目发送请求,可以请求到数据。

Feign也实现了负载均衡,而且Feign实现的负载均衡也是通过整合Ribbon实现的(Ribbon的介绍和使用,我会在以后的章节中讨论学习)。
可以通过idea启动多个user-service实例,至于idea怎么一个项目启动多个实例可以搜索引擎查收。
多次请求接口,通过日志打印,我们可以看到两个实例都会被请求到。

4.指定Feign的日志级别
  • NONE(默认值):不记录任何日志
  • BASIC:仅记录请求方法、URL、相应状态码以及执行时间
  • HEADERS:记录请求和响应的header
  • FULL:记录请求和相应的header、body和元数据
4.1全局配置

代码方式:

  • 先写Feign的全局配置类
    public class GlobalFeignConfiguration {
      @Bean
      public Logger.Level level(){
          return Logger.Level.FULL;
      }
  }
  • 再在启动类上的@EnableFeignClients的注解上添加(defaultConfiguration = GlobalFeignConfiguration.class)
    五、Spring Cloud Alibaba毕业版:使用Feign实现远程HTTP调用_第1张图片
    配置属性方式:
    直接在yml文件中添加配置
feign:
  client:
    config:
      # 全局配置
      default:
        loggerLevel: full
4.2细粒度配置(为某个服务配置日志级别)

代码方式:

  • 先为user-service写配置类
    public class UserServiceFeignConfiguration {
      @Bean
      public Logger.Level level(){
          return Logger.Level.FULL;
      }
  }
  • 再在feignClien接口指向上述配置类
  • 最后在yml文件下配置日志级别
    logging:
      level:
        com.people.orderservice.feignclient.UserServiceFeignClient: debug

配置属性方式:
直接在yml文件中添加配置

feign:
  client:
    config:
      user-service:
        loggerLevel: full

你可能感兴趣的:(一起学spring,cloud,alibaba)