OpenFeign(2020-10-13)

官网:https://cloud.spring.io/spring-cloud-static/Hoxton.SR1/reference/htmlsingle/#spring-cloud%20-openfeign
Feign是一个声明式Web Service客户端。使用Feign能让Web Service编写更加简单。它使用方法是定义一个服务接口,然后在上面加上注解。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters.Feign可以与Eureka和Ribbon使用实现负载均衡。

Feign能干什么?

Feign旨在使编写Java http客户端变得更加简单。
在使用Ribbon和RestTemplate时,利用RestTemplate对http请求的封装处理,形成一套模板化的调用方法。但是在实际开发中,由于对服务调用的依赖可能不止一处,往往往往一个接口会被多出调用,所以通常都会针对每个微服务自行封装一些客户端来包装,我们只需要创建一个接口并使用注解的方式来配置它(以前是Dao接口上面标注Mapper注解,现在是在一个微服务接口上面标注一个Feign注解即可),即完成对服务提供方的接口绑定,简化了使用SpringCloud Ribbon时,自动封装服务调用客户端的开发量。

Feign集成了Ribbon

利用Ribbon维护了服务(payment)的服务列表信息,并且通过轮询实现了客户端的负载均衡。而与Ribbon不同的是,通过feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现服务调用。

使用示例:

1、创建feign-server、feign-service、feign-service2、feign-consumer。具体创建如ribbon篇一致。
2、在feign-consumer模块中在主启动类添加@EnableFeignClients。
新建HelloService,内容如下:



新建HelloController,调用Service,内容如下:


OpenFeign超时控制

  • 故意设置超时
    在hello-service模块controller添加如下内容:



    在hello-consumer模块service层添加helloTimeout接口



    在controller层实现helloTimeout接口

    测试结果:使用8000端口访问没问题,

    使用80端口访问,报错。



    报错原因:
    默认Feign客户端只等待1秒钟,但是服务器端处理需要超过1秒钟,导致Feign客户端不想等待,直接返回报错。为了避免这样的情况,有时候我们需要设置Feign客户端的草率控制。
    解决此问题,在yml文件中配置:

    添加完成后重新启动80端口

OpenFeign日志增强

Feign提供了日志打印功能,可以通过配置来调整日志级别,从而了解Feign中Http请求细节。简单来说,就是对Feign接口的调用情况进行监控和输出。

日志级别
  • NONE :默认的,不显示任何日志;
  • BASIC:仅记录请求方法、URL、响应状态码以及执行时间
  • HEADERS: 记录请求方法、URL、响应状态码、执行时间请求和响应的头信息;
  • FULL: 除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。
    示例:
  • 新建config.FeignConfig类,内容如下:


  • 在yml文件中添加以下内容:


  • 测试
    在浏览器输入http://localhost:80/feign-consumer/
    打印内容如下:

你可能感兴趣的:(OpenFeign(2020-10-13))