SpringCloud从入门到精通(五)

Feign

Feign- 概述
• Feign 是一个声明式的 REST 客户端,它用了基于接口的注解方式,很方便实现客户端配置。
• Feign 最初由 Netflix 公司提供,但不支持 SpringMVC 注解,后由 SpringCloud 对其封装,支持了
SpringMVC 注解,让使用者更易于接受
Feign- 快速入门 
1. 在消费端引入 open-feign 依赖


  org.springframework.cloud
  spring-cloud-starter-openfeign
2. 编写 Feign 调用接口
/**
*
* feign声明式接口。发起远程调用的。
*
String url = "http://FEIGN-PROVIDER/goods/findOne/"+id;
Goods goods = restTemplate.getForObject(url, Goods.class);
*
* 1. 定义接口
* 2. 接口上添加注解 @FeignClient,设置value属性为 服务提供者的 应用名称
* 3. 编写调用接口,接口的声明规则 和 提供方接口保持一致。
* 4. 注入该接口对象,调用接口方法完成远程调用
*/
@FeignClient(value = "FEIGN-PROVIDER")
public interface GoodsFeignClient {
  @GetMapping("/goods/findOne/{id}")
    public Goods findGoodsById(@PathVariable("id") int id);
}
OrderController
@RestController
@RequestMapping("/order")
public class OrderController {
  @Autowired
  private RestTemplate restTemplate;
  @Autowired
  private GoodsFeignClient goodsFeignClient;
  @GetMapping("/goods/{id}")
  public Goods findGoodsById(@PathVariable("id") int id){
    /*
    String url = "http://FEIGN-PROVIDER/goods/findOne/"+id;
    // 3. 调用方法
    Goods goods = restTemplate.getForObject(url, Goods.class);
    return goods;*/
    Goods goods = goodsFeignClient.findGoodsById(id);
    return goods;
  }
}
goodsFeignClient 报红,不影响使用

 

3. 在启动类 添加 @EnableFeignClients 注解,开启 Feign 功能
@EnableDiscoveryClient // 激活DiscoveryClient
@EnableEurekaClient
@SpringBootApplication
@EnableFeignClients //开启Feign的功能
public class ConsumerApp {
  public static void main(String[] args) {
    SpringApplication.run(ConsumerApp.class,args);
  }
}

Feign 超时配置
• Feign 底层依赖于 Ribbon 实现负载均衡和远程调用。
• Ribbon 默认 1 秒超时。
超时配置:
feign-consumer application.yml
# 设置Ribbon的超时时间
ribbon:
  ConnectTimeout: 1000 # 连接超时时间 默认1s 默认单位毫秒
  ReadTimeout: 3000 # 逻辑处理的超时时间 默认1s 默认单位毫秒
Feign- 日志记录
Feign 只能记录 debug 级别的日志信息
feign-consumer application.yml
# 设置当前的日志级别 debug,feign只支持记录debug级别的日志
logging:
  level:
    com.demo: debug
定义 Feign 日志级别 Bean
FeignLogConfig
@Configuration
public class FeignLogConfig {
/*
NONE,不记录
BASIC,记录基本的请求行,响应状态码数据
HEADERS,记录基本的请求行,响应状态码数据,记录响应头信息
FULL;记录完成的请求 响应数据
*/
  @Bean
  public Logger.Level level(){
    return Logger.Level.FULL;
  }
}
启用该 Bean
/**
*
* feign声明式接口。发起远程调用的。
*
String url = "http://FEIGN-PROVIDER/goods/findOne/"+id;
Goods goods = restTemplate.getForObject(url, Goods.class);
*
* 1. 定义接口
* 2. 接口上添加注解 @FeignClient,设置value属性为 服务提供者的 应用名称
* 3. 编写调用接口,接口的声明规则 和 提供方接口保持一致。
* 4. 注入该接口对象,调用接口方法完成远程调用
*/
@FeignClient(value = "FEIGN-PROVIDER", configuration = FeignLogConfig.class)
public interface GoodsFeignClient {
  @GetMapping("/goods/findOne/{id}")
  public Goods findGoodsById(@PathVariable("id") int id);
}

你可能感兴趣的:(SpringCloud,spring,cloud,java,分布式)