Spring Cloud——OpenFeign

Spring Cloud——OpenFeign

  • 一、OpenFeign能干嘛
  • 二、OpenFeign的基本使用
  • 三、Feign的高级特性
    • 1.OpenFeign超时控制
    • 2.OpenFeign重试机制
    • 3.OpenFeign之性能优化HttpClient5
    • 4.OpenFeign请求和响应压缩
    • 5.OpenFeign之Feign日志打印
  • 四、参考

  • OpenFeign是一个声明式的Web服务客户端
  • OpenFeign基本上就是当前微服务之间调用的事实标准。
  • 使用OpenFeign只需创建一个Rest接口并在该接口上添加注解@FeignClient即可。
    在这里插入图片描述

一、OpenFeign能干嘛

  • 我们之前使用Spring Cloud LoadBalancer + RestTemplate时,利用RestTemplatehttp请求的封装处理形成了一套模板化的调用方法。
  • 但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一个客户端类来包装这些依赖服务的调用。所以,OpenFeign在此基础上做了进一步封装,由它来帮助我们定义和实现依赖服务接口的定义。在OpenFeign的实现下,我们只需创建一个接口并使用注解的方式来配置它(在一个微服务接口上面标注一个@FeignClient注解即可),即可完成对服务提供方的接口绑定,统一对外暴露可以被调用的接口方法,大大简化和降低了调用客户端的开发量,也即由服务提供者给出调用接口清单,消费者直接通过OpenFeign调用即可。
  • 可以在使用OpenFeign时提供客户端的负载均衡,也可以集成阿里巴巴Sentinel来提供熔断、降级等功能。而与Spring Cloud LoadBalancer不同的是,通过OpenFeign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用。
  • OpenFeign默认就支持负载均衡。

二、OpenFeign的基本使用

  • 第一步,修改pom.xml添加依赖
    • 注意: 对于feign依赖的添加,是谁想获取其他的服务就在谁的pom文件中添加feign依赖。
    <!--openfeign-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    
  • 第二步,在主启动类上添加注解@EnableFeignClients表示开启OpenFeign功能并激活
    @SpringBootApplication
    @EnableFeignClients
    public class MainFeign80 {
        public static void main(String[] args) {
            SpringApplication.run(MainFeign80.class, args);
        }
    }
    
  • 第三步,定义Feign客户端
    • 注意:如果是在一个单独的通用模块中进行Feign接口定义的,这个模块中也需要添加Feign相关的依赖。
    /**
    * 注解的value属性就是想要调用服务的名称,
    * 注意: 如果参数列表中如果有参数, 注解不可以省略,注解不可以省略,注解不可以省略, feign不支持, 踩过
    * 错: String getDesc(String name);
    * 对: String getDesc(@RequestParam(“name”) String name);
    */
    @FeignClient("cloud-payment-service")
    public interface PayFeignAPI {
        @GetMapping(value = "/pay/get/info")
        String getInfoByConsul();
    }
    
  • 第四步,定义控制器
    @Slf4j
    @RestController
    @RequestMapping("/feign")
    public class OrderController {
        @Resource
        private PayFeignAPI payFeignAPI;
    
        @GetMapping("/pay/get/info")
        public String getPort() {
            return payFeignAPI.getInfoByConsul();
        }
    }
    

三、Feign的高级特性

1.OpenFeign超时控制

  • OpenFeign客户端默认等待60秒钟,但是服务端处理超过规定时间会导致Feign客户端返回报错。为了避免这样的情况,有时候我们需要设置Feign客户端的超时控制,默认60秒太长或者业务时间太短都不好。
  • OpenFeign主要通过两个参数来进行超时控制。
    在这里插入图片描述
  • 全局配置和局部配置
    spring:
    	cloud:
    		openfeign:
    			client:
    				config:
          				# 全局配置 openfeign 的超时时间限制
          				default:
    			          # 连接超时时间
    			          connectTimeout: 3000
    			          # 读取超时时间(业务处理时间)
    			          readTimeout: 3000
    			     	# 局部 openfeign 的超时时间限制,全局配置和局部配置可以同时存在,遵循局部优先原则
          				cloud-payment-service: # 这里写的是具体配置的服务名
    			            # 连接超时时间
    			            connectTimeout: 20000
    			            # 读取超时时间(业务处理时间)
    			            readTimeout: 20000
    

2.OpenFeign重试机制

  • OpenFeign的重试机制默认是关闭的。
    在这里插入图片描述
  • 添加配置类开启重试机制
    @Configuration
    public class FeignConfig {
        /**
         * 设置 feign 的重试机制
         */
        @Bean
        public Retryer myRetryer() {
            //Feign 默认配置是不走重试策略的
    //        return Retryer.NEVER_RETRY;
            //最大请求次数为 3, 初始时间间隔为 100ms,重试最大间隔为 1s.
            return new Retryer.Default(100, 1, 3);
        }
    }
    

3.OpenFeign之性能优化HttpClient5

  • OpenFeignhttpClient如果不做特殊配置,OpenFeign默认使用JDK自带的HttpURLConnection发送请求,由于默认HttpURLConnection没有连接池,性能和效率比较低。
  • 使用Apache HttpClient5替换OpenFeign默认的HttpURLConnection
    在这里插入图片描述
    在这里插入图片描述
  • 第一步,修改pom.xml添加依赖
    <!-- httpclient5-->
    <dependency>
        <groupId>org.apache.httpcomponents.client5</groupId>
        <artifactId>httpclient5</artifactId>
        <version>5.3</version>
    </dependency>
    <!-- feign-hc5-->
    <dependency>
        <groupId>io.github.openfeign</groupId>
        <artifactId>feign-hc5</artifactId>
        <version>13.1</version>
    </dependency>
    
  • 添加配置开启HttpClient5
    #  Apache HttpClient5 配置开启
    spring:
      cloud:
        openfeign:
          httpclient:
            hc5:
              enabled: true
    
    在这里插入图片描述

4.OpenFeign请求和响应压缩

spring:
  cloud:
    # 配置OpenFeign
    openfeign:
      # 设置 request 和 response 是否进行 gzip 压缩
      compression:
        request:
          # 开启请求压缩
          enabled: true
          # 请求触发压缩的最小值
          min-request-size: 2048
          # 请求触发压缩的数据类型
          mime-types: text/html, application/xml, application/json
        response:
          # 开启响应压缩
          enabled: true
  • 使用gizp压缩前
    在这里插入图片描述
  • 使用gizp压缩后
    在这里插入图片描述

5.OpenFeign之Feign日志打印

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

  • Feign的日志级别
    在这里插入图片描述

    • NONE:默认的,不显示任何日志;
    • BASIC:仅记录请求方法、URL、响应状态码及执行时间;
    • HEADERS:除了 BASIC 中定义的信息之外,还有请求和响应的头信息;
    • FULL:除了 HEADERS 中定义的信息之外,还有请求和响应的正文及元数据。
  • 第一步,配置日志Bean

    @Configuration
    public class FeignConfig {
        /**
         * 设置 feign 的日志级别
         */
        @Bean
        public Logger.Level feigenLoggerLevel() {
            return Logger.Level.FULL;
        }
    }
    
  • 第二步,开启Feign日志功能

    • 公式(三段):logging.level + 含有@FeignClient注解的完整带包名的接口名+debug
    # feign日志以什么级别监控哪个接口
    logging:
      level:
        com:
          atguigu:
            cloud:
              apis:
                PayFeignApi: debug 
    

    在这里插入图片描述


四、参考

[1]. feign的启动异常:The bean ‘XXX.FeignClientSpecification’, defined in null, could not be registered

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/589195.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android --- 消息机制与异步任务

在Android中&#xff0c;只有在UIThread(主线程)中才能直接更新界面&#xff0c; 在Android中&#xff0c;长时间的工作联网都需要在workThread(分线程)中执行 在分线程中获取服务器数据后&#xff0c;需要立即到主线程中去更新UI来显示数据&#xff0c; 所以&#xff0c;如…

程序员的五大方法论

前言&#xff1a; 最近看了一篇总结程序员学习&#xff0c;晋升方法的文章&#xff0c;颇有感想&#xff0c;决定分享给大家&#xff0c;原文地址&#xff1a;给程序员的5条学习方法论 (qq.com)https://mp.weixin.qq.com/s/xVFlF9qTf9c74Emmdm0DqA 在繁忙的工作中&#xff0c;持…

如何在postman上提交文件格式的数据

如何在postman上提交文件格式的数据 今天在写一个文件上传的功能接口时&#xff0c;想用postman进行提交&#xff0c;花了些时间才找到在postman提交文件格式的数据。记录一下吧&#xff01; 1.打开postman&#xff0c;选择POST提交方式&#xff0c;然后在Params那一行的Head…

代码随想录算法训练营DAY45|C++动态规划Part7|70.爬楼梯(进阶版)、322. 零钱兑换、279.完全平方数

文章目录 70.爬楼梯&#xff08;进阶版&#xff09;322. 零钱兑换思路CPP代码 279.完全平方数思路CPP代码 70.爬楼梯&#xff08;进阶版&#xff09; 卡码网&#xff1a;57. 爬楼梯 文章讲解&#xff1a;70.爬楼梯(进阶版) 322. 零钱兑换 力扣题目链接 文章讲解&#xff1a;322…

安装英伟达nvidia p4计算卡驱动@FreeBSD14

FreeBSD也能跑cuda AI训练拉&#xff01; 在FreeBSD安装好pytorch和飞桨cpu版本后&#xff0c;尝试安装英伟达nvidia p4计算卡驱动。毕竟全靠cpu速度太慢了&#xff0c;还是GPU快啊&#xff01;在磕磕绊绊几天后&#xff0c;终于成功成功安装好nvidia p4的cuda驱动&#xff0c…

从零开始:Django项目的创建与配置指南

title: 从零开始&#xff1a;Django项目的创建与配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 后端开发 tags: DjangoWebDevPythonORMSecurityDeploymentOptimization Django简介&#xff1a; Django是一个开源的高级Python Web框架&#xff…

The Role of Subgroup Separability in Group-Fair Medical Image Classification

文章目录 The Role of Subgroup Separability in Group-Fair Medical Image Classification摘要方法实验结果 The Role of Subgroup Separability in Group-Fair Medical Image Classification 摘要 研究人员调查了深度分类器在性能上的差异。他们发现&#xff0c;分类器将个…

PHP源码_最新在线工具箱网站系统源码

项目运行截图 源码贡献 https://githubs.xyz/boot?app41 部分数据库表 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------------------------- -- Table structure for toolbox_category -- ---------------------------- DROP TABLE IF EXISTS toolbox_category…

【网络原理】HTTP 协议的基本格式和 fiddler 抓包工具的用法

系列文章目录 【网络通信基础】网络中的常见基本概念 【网络编程】网络编程中的基本概念及Java实现UDP、TCP客户端服务器程序&#xff08;万字博文&#xff09; 【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制&#xff08;CRC算法、MD5算法&#xff09; 【网络…

下载安装 VisualVM

1、下载安装 VisualVM 第1步&#xff1a;下载地址&#xff1a;https://visualvm.github.io/ 第2步&#xff1a;解压到制定位置 第3步&#xff1a;指定jdk路径 下载完成后&#xff0c;在etc文件夹下找到visualvm.conf文件&#xff0c;设置jdk路径visualvm_jdkhome"D:\ITS…

ICode国际青少年编程竞赛- Python-1级训练场-路线规划

ICode国际青少年编程竞赛- Python-1级训练场-路线规划 1、 Dev.step(3) Dev.turnLeft() Dev.step(4)2、 Dev.step(3) Dev.turnLeft() Dev.step(3) Dev.step(-6)3、 Dev.step(-2) Dev.step(4) Dev.turnLeft() Dev.step(3)4、 Dev.step(2) Spaceship.step(2) Dev.step(3)5、…

ElasticSearch教程入门到精通——第一部分(基于ELK技术栈elasticsearch 8.x新特性)

ElasticSearch教程入门到精通——第一部分&#xff08;基于ELK技术栈elasticsearch 8.x新特性&#xff09; 1. ElasticSearch安装&#xff08;略&#xff09;2. ElasticSearch基础功能2.1 索引操作2.1.1 创建索引2.1.2 Head 索引2.1.3 查询索引2.1.3.1 查询单独索引2.1.3.2 查询…

【MATLAB】GUI初步设计

MATLAB界面设计 前言一、基本步骤1.1 创建GUI文件1.2 界面设计 总结 前言 为了完成图像处理的作业&#xff0c;简直就是生活不易啊 找到一个很棒的教学视频 基于MATLAB的GUI界面设计流程讲解 一、基本步骤 1.1 创建GUI文件 由于在写博文之前我已经创建好文件了&#xff0c;…

邊緣智能2024—AI開發者峰會(5月9日)數碼港即將啟幕

隨著 AI &#xff08;人工智能&#xff09;技術的飛速發展&#xff0c;我們正迎來邊緣計算智能化與分布式AI深度融合的新時代&#xff0c;共同演繹分布式智能創新應用的壯麗篇章。"邊緣智能2024 - AI開發者峰會"將聚焦於這一前沿領域&#xff0c;探討如何通過邊緣計算…

中国发布首个汽车大模型标准

&#x1f989; AI新闻 &#x1f680; 中国发布首个汽车大模型标准 摘要&#xff1a;中国信息通信研究院于4月28日发布了国内首个汽车大模型标准&#xff0c;标志着汽车行业正式迈向“人工智能&#xff0b;”时代。该标准包含三个核心能力域&#xff1a;场景丰富度、能力支持度…

Pytorch学习笔记——环境配置安装

1、下载和配置环境 Anacodna必备&#xff08;工具包里面都包含的有&#xff0c;集成与运用科学分析的软件&#xff0c;比较方便&#xff09; 点击这个网页:Download Now | Anacondahttps://www.anaconda.com/download/success 按照教程安装&#xff08;教程可以自己在网上搜…

XY_RE复现(五)

一&#xff0c;给阿姨倒一杯卡布奇诺 是一道魔改TEA加密 给出了一些初始化&#xff0c;然后输入的flag拆分&#xff0c;两两一组&#xff0c;通过for循环放入encrypt加密函数 #include <stdio.h> #define uint32_t unsigned intvoid decrypt(uint32_t *v, uint32_t *ke…

拆单算法交易(Algorithmic Trading)

TWAP TWAP交易时间加权平均价格Time Weighted Average Price 模型&#xff0c;是把一个母单的数量平均地分配到一个交易时段上。该模型将交易时间进行均匀分割&#xff0c;并在每个分割节点上将拆分的订单进行提交。例如&#xff0c;可以将某个交易日的交易时间平均分为N 段&am…

守护数据安全: 零信任视角下的勒索病毒防范之道

前言 就在近日&#xff0c;鸿海集团旗下半导体设备大厂——京鼎精密科技股份有限公司&#xff08;以下简称“京鼎”&#xff09;遭到了黑客的入侵。黑客在京鼎官网公布信息直接威胁京鼎客户与员工&#xff0c;如果京鼎不支付赎金&#xff0c;客户资料将会被公开&#xff0c;员…

pyqt 滑动条控件QSlider

pyqt 滑动条控件QSlider 滑动条控件QSlider效果代码 滑动条控件QSlider QSlider 是 PyQt中的一个控件&#xff0c;它允许用户通过拖动滑块或点击滑块轨道上的任意位置来选择一系列值。 QSlider 有两种主要的类型&#xff1a;Qt.Horizontal&#xff08;水平滑块&#xff09;和 …