Feign的入门使用总结

1.简介

Feign 是由 Netflix 开源的声明式的 HTTP 客户端,目前已经捐献给 OpenFeign 社区。

Spring Cloud OpenFeign 组件,将 Feign 集成到 Spring Cloud 体系中,实现服务的声明式 HTTP 调用。相比使用 RestTemplate 实现服务的调用,Feign 简化了代码的编写,提高了代码的可读性,大大提升了开发的效率。

Spring Cloud OpenFeign 除了支持 Feign 自带的注解之外,额外提供了对 JAX-RS 注解、SpringMVC 注解的支持。特别是对 SpringMVC 注解的支持,简直是神来之笔,让我们不用学习 Feign 自带的注解,而直接使用超级熟悉的 SpringMVC 注解。

同时,Spring Cloud OpenFeign 进一步将 Feign 和 Ribbon 整合,提供了负载均衡的功能。另外,Feign 自身已经完成和 Hystrix 整合,提供了服务容错的功能。

如此,我们基于注解,极其简单的实现服务的调用,并且具有负载均衡、服务容错的功能。

2.入门案例

基于上一篇Riibon入门使用总结的使用案例的基础上修改消费者

依赖引入

    <!--openfeign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

新建Feign接口

/**
 * 服务提供者feign
 *
 * @author xiao7
 */
@FeignClient(value = "cloud-provider")
public interface ProviderFeignService {

    /**
     * provider测试接口
     *
     * @param name
     * @return
     */
    @GetMapping("/provider/index/{name}")
    String testProvider(@PathVariable("name") String name);
}

配置启动类

@EnableFeignClients:开启Feign,会扫描启动类的包注册需要的Bean

/**
 * @author xiao7
 */
@EnableDiscoveryClient
@SpringBootApplication
@RibbonClient(value = "cloud-provider", configuration = FiveTimeRule.class)
@EnableFeignClients
public class ConsumerApplication8082 {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication8082.class, args);
    }
}

3. 自定义 Feign 配置

实现 Feign 自定义配置,可以通过配置文件Spring JavaConfig 两种方式。

3.1.日志配置

Feign 中,定义了四种日志级别:

  • NONE:不打印日志
  • BASIC:只打印基本信息,包括请求方法、请求地址、响应状态码、请求时长
  • HEADERS:在 BASIC 基础信息的基础之上,增加请求头、响应头
  • FULL:打印完整信息,包括请求和响应的所有信息。

开启日志需要扫描的包

logging:
  level:
    xiao7.cloud.consumer.feign: DEBUG

配置文件方式

feign:
  # Feign 客户端配置,对应 FeignClientProperties 配置属性类
  client:
    # config 配置项是 Map 类型。key 为 Feign 客户端的名字,value 为 FeignClientConfiguration 对象
    config:
      # 全局级别配置
      default:
        logger-level: BASIC
      # 客户端级别配置
      cloud-provider:
        logger-level: FULL

通过 FeignClientConfiguration 配置属性类,我们可以看到配置文件所支持的 FeignClient 的所有配置项。
代码如下:

// Feign 日志级别。默认为 NONE
private Logger.Level loggerLevel;
// 请求的连接超时时长,单位:毫秒。默认为 10 * 1000 毫秒
private Integer connectTimeout;
// 请求的读取超时时长,单位:毫秒。默认为 60 * 1000 毫秒
private Integer readTimeout;
// 重试策略。默认为不重试
private Class<Retryer> retryer;
// 错误解码器
private Class<ErrorDecoder> errorDecoder;
// 请求拦截器
private List<Class<RequestInterceptor>> requestInterceptors;
// 是否对响应状态码为 404 时,进行解码。默认为 false 
private Boolean decode404;
// 解码器。
// 为空时,默认创建 SpringDecoder Bean
private Class<Decoder> decoder;
// 解码器。默认为 SpringEncoder
// 为空时,默认创建 SpringEncoder Bean
private Class<Encoder> encoder;
// 契约。
// 为空时,默认创建 SpringMvcContract Bean,提供对 SpringMVC 注解的支持
private Class<Contract> contract;

Java Config方式

@Configuration
public class CloudConfig {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
        return restTemplate;
    }

    @Bean
    public Logger.Level defaultFeignClientLoggerLevel() {
        return Logger.Level.FULL;
    }
}

启动测试即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值