Feign的详解与使用

本文深入介绍了Feign的概念、依赖、使用方法和配置细节。Feign是基于Ribbon和Hystrix的声明式HTTP客户端,提供客户端负载均衡和熔断功能。通过创建业务接口并绑定参数,实现简洁优雅的调用。文中还提到了Feign的配置,包括客户端配置、服务降级、重试机制和请求压缩,并警告了启用Feign重试可能导致的问题。最后,讨论了Feign使用中的注意事项,如避免幂等性问题和理解源码以避免踩坑。
摘要由CSDN通过智能技术生成

Feign详解与使用

一、什么是Feign

1、概念

​ 学过了Ribbon和Hystrix的读者都知道,Ribbon实现客户端负载均衡是通过拦截RestTemplate进行相应的处理。而RestTemplate已经对Http请求进行了一系列模板式的封装,我们使用的时候,通常会基于RestTemplate进行封装,形成相应的业务接口。

​ 但是,这个封装业务接口的过程,需要一定的工作量;如果能有声明式的调用那么就能在开发中大大减少开发量。于是,出现了Feign,这是基于Netflix Feign开源组件进行适配SpringMVC,添加了注解支持(一些地方会有小许差别)的组件,该组件即有客户端负载均衡的功能,也有熔断器的服务降级等功能。

​ 在我看来,它最大的好处是基于声明式开发方式,能够使得代码优雅、简洁,开发量小

2、实现依赖

​ 上面,我们说了,它拥有客户端负载均衡、熔断器的服务降级等功能,那么,它是怎么实现的呢?其实,它是将Ribbon和Hystrix作为底层支持,进行高层封装,并且整合SpringMVC等功能实现的一个组件。

  • Ribbon
  • Hystrix

以上两个组件就是Feign的实现依赖。

二、Feign的使用

接下来,讲讲Feign的使用。

  • 引入依赖
<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
 </dependency>
  • 启动类注册Bean
//添加这个注解
@EnableFeignClients

上面我一直在强调,Feign是声明式开发,接下来,就展示一下使用Feign的声明式开发究竟有多少优雅、简洁。

  • 基于Feign的声明式开发可以分为如下三步:
    • 创建业务消费接口
    • 根据相应的消费接口进行参数的绑定
    • 调用业务接口

创建业务接口:

@FeignClient(value = "provider")
public interface FeignService {
   
    /**
     * to server
     *
     * @return s
     */
    @GetMapping("/zone")
    String feignService();

    /**
     * @param id 通过参数请求
     * @return 用户信息
     */
    @GetMapping("/queryUserById")
    User queryUserById(@RequestParam"id") String id);
}
//用户类
public class User {
   
    private int id;

    public int getId() {
   
        return id;
    }

    public void setId(int id) {
   
        this.id = id;
    }
}
	//以下是在控制层调用对应的业务方法
	@AutoWired
    private FeignService service;
    @GetMapping("/consumer")
    public String test() {
   
        return service.feignService();
    }

以上的例子就是feign在微服务中的入门级别应用,当然,Feign的使用是基于Ribbon和Hystrix,那么,我们是无需对Feign进行单独配置,只需要修改对应的Ribbon和Hystrix的配置即可。如果对于那两个组件不熟悉,可以看我关于那两个组件的文章,里面讲解得足够详细。

三、Feign配置

  • 客户端配置
//这是最简单的客户端指定服务配置
@FeignClient(value = "provider")
  • 客户端指定fallBack(服务降级)
//指定fallBack属性的实现类
@FeignClient(value = "provider",fallback = HystrixServiceCompenent.class)
public interface FeignService {
   
  //这里要注意,value属性名不能省略,虽然在MVC中可以,但是在feign中不行。
    @GetMapping(value="/zone")
    String feignService();
    @GetMapping(value="/queryUserById")
    User queryUserById(@RequestParam String id);
}
//以下就是实现服务降级的组件。
@Component
publ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值