当前位置: 首页 > news >正文

OpenFeign总结

介绍

Feign是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单。它的使用方法是定义一个服务接口然后在上面添加注解。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。

  • Feign旨在使编写Java Http客户端变得更容易。

  • 在Feign的实现下,我们只需创建一个接口并使用注解的方式来配置它(以前是Dao接口上面标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解即可),即可完成对服务提供方的接口绑定,简化了使用Spring cloud Ribbon时,自动封装服务调用客户端的开发量。

  • Feign集成了Ribbon

  • 利用Ribbon维护了Payment的服务列表信息,并且通过轮询实现了客户端的负载均衡。

官方文档

https://cloud.spring.io/spring-cloud-static/Hoxton.SR1/reference/htmlsingle/#spring-cloud-openfeign

Github地址

https://github.com/spring-cloud/spring-cloud-openfeign

Feign和OpenFeign两者区别

  • Feign是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。Feign的使用方式是:使用Feign的注解定义接口,调用这个接口,就可以调用服务注册中心的服务。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
  • OpenFeign是Spring Cloud在Feign的基础上支持了SpringMVC的注解,如@RequesMapping等等。OpenFeign的@Feignclient可以解析SpringMVc的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

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

OpenFeign的使用

服务调用

主启动类

@SpringBootApplication
@EnableFeignClients
public class OrderFeignMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderFeignMain80.class,args);
    }
}

业务类

@Component
@FeignClient(value = "CLOUD-PAYMENT-SERVICE")
public interface PaymentFeignService {

    @GetMapping(value = "/payment/get/{id}")
    public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id);
}
Feign自带负载均衡配置项

超时控制

当超时时会将会跳出错误Spring Boot默认错误页面,主要异常:feign.RetryableException:Read timed out executing GET http://CLOUD-PAYMENT-SERVCE/payment/feign/timeout。

OpenFeign默认等待1秒钟,超过后报错

YML文件里需要开启OpenFeign客户端超时控制

#设置feign客户端超时时间(OpenFeign默认支持ribbon)(单位:毫秒)
ribbon:
  #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间
  ReadTimeout: 5000
  #指的是建立连接后从服务器读取到可用资源所用的时间
  ConnectTimeout: 5000

日志增强

日志打印

Feign提供了日志打印功能,我们可以通过配置来调整日志级别,对Feign接口的调用情况进行监控和输出

日志级别

  • NONE:默认的,不显示任何日志;

  • BASIC:仅记录请求方法、URL、响应状态码及执行时间;

  • HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息;

  • FULL:除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。

配置日志bean

import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FeignConfig {

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

YML文件里需要开启日志的Feign客户端

logging:
  level:
    # feign日志以什么级别监控哪个接口
    com.xxx.springcloud.service.PaymentFeignService: debug

相关文章:

  • 【Linux】基础IO --- 系统级文件接口、文件描述符表、文件控制块、fd分配规则、重定向…
  • 计算机网络01_---软考高级系统架构师010
  • 【Linux】冯诺依曼体系结构与操作系统概念理解
  • 【c语言进阶】枚举与联合体的基本知识大全
  • Python与Matlab混合编程案例
  • 排列的时候如何避免重复?
  • 芒果改进YOLOv5系列:原创结合Conv2Formers改进结构,Transformer 风格的卷积网络视觉基线模型,超越ConvNeXt结构
  • 利用Windows系统服务进行权限提升
  • WebAssembly编译之(2)-Ubuntu搭建WASM编译环境
  • InstanceNorm LayerNorm
  • yolo结构介绍
  • 最详细、最仔细、最清晰的几道python习题及答案(建议收藏哦)
  • C语言:数组
  • Python装饰器使用方法详解
  • 「python|语言特性」为什么f-string是python中最舒适的字符串格式化方式
  • [NodeJS] 关于Buffer
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • Asm.js的简单介绍
  • css的样式优先级
  • Git 使用集
  • java8-模拟hadoop
  • Java教程_软件开发基础
  • Linux链接文件
  • opencv python Meanshift 和 Camshift
  • php ci框架整合银盛支付
  • vagrant 添加本地 box 安装 laravel homestead
  • 反思总结然后整装待发
  • 前端技术周刊 2019-01-14:客户端存储
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 一道面试题引发的“血案”
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • # 数论-逆元
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (10)STL算法之搜索(二) 二分查找
  • (11)MATLAB PCA+SVM 人脸识别
  • (33)STM32——485实验笔记
  • (安卓)跳转应用市场APP详情页的方式
  • (第一天)包装对象、作用域、创建对象
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (三)SvelteKit教程:layout 文件
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转)iOS字体
  • (转)shell调试方法
  • (转)Unity3DUnity3D在android下调试
  • (转)甲方乙方——赵民谈找工作
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .CSS-hover 的解释
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET 动态调用WebService + WSE + UsernameToken
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证