Feign功能详解、使用步骤、代码案例

简介:Feign是Netflix开发的声明式,模板化的HTTP客户端,简化了HTTP的远程服务的开发。Feign是在RestTemplate和Ribbon的基础上进一步封装,使用RestTemplate实现Http调用,使用Ribbon实现负载均衡。我们可以看成 Feign = RestTemplate+Ribbon

目录

1、Feign替代RestTemplate

1.1 Feign的使用步骤

2、自定义配置

2.1 Feign部分自定义配置

2.2 修改Feign自定义配置

2.2.1 方式一

2.2.2 方式二

3、Feign性能优化

3.1 Feign性能优化原理

3.2 实现Apache HttpClient

4、Feign最佳实践

4.1 方式一(继承)

4.2 方式二(抽取)

4.2.1 方式二(抽取)案例

4.3 Feign的包扫描

5、总结


1、Feign替代RestTemplate

1.1 Feign的使用步骤

图 1.1-1 Feign的使用步骤

步骤一

步骤二

上图中展示的是Feign的调用步骤,相较于RestTemplate法更加的方便,代码更简洁。

2、自定义配置

2.1 Feign部分自定义配置

图 2.1-1 部分自定义配置
上图中展示的是Feign运行的配置

2.2 修改Feign自定义配置

2.2.1 方式一
图 2.2.1-1 修改配置文件
上图中展示的就是修改Feign自定义配置——日志配置的方法
2.2.2 方式二
图 2.2.2-1 修改配置文件
上图中展示的就是修改Feign自定义配置——日志配置的方法

3、Feign性能优化

3.1 Feign性能优化原理

图 3.1-1 Feign性能优化原理
上图中展示的Feign性能优化的原因,即默认情况下Feign底层不支持连接池,所以在发送请求时性能会受到影响,这里通过改变底层实现达到支持连接池的目的

3.2 实现Apache HttpClient

图 3.2-1 实现Apache HttpClient
上图中展示的是改变Feign底层,实现Apache HttpClient,从而让微服务连接支持连接池,提高性能

4、Feign最佳实践

4.1 方式一(继承)

图 4.1-1 方式一(继承)

上图中展示的是通过继承的方式实现统一接口:

即将微服务中的 FeignClient 定义的接口方法和被访问的提供者 Controller 中的方法统一一个标准

4.2 方式二(抽取)

图 4.1 方式一(抽取)
上图中展示的是通过抽取的方式实现统一接口,不好的一点就是在抽取出来的独立模块中集合了大量的函数,当消费者引用的有许多的函数使用不上的,所以产生了代码冗余,但是这里还是建议使用方式二作为标准。
4.2.1 方式二(抽取)案例
图 4.2.1-1 (抽取)案例步骤一

实现最佳实践方式二的步骤如下:

  1. 首先创建一个module,命名为feign-api,然后引入feignstarter依赖
  2. order-service中编写的UserClientUserDefaultFeignConfiguration都复制到feign-api项目中
  3. order-service中引入feign-api的依赖
  4. 修改order-service中的所有与上述三个组件有关的import部分,改成导入feign-api中的包
  5. 重启测试
上图展示的便是详细步骤,按照这样操作就可实现模块的抽取

4.3 Feign的包扫描

4.3-1 Feign的包扫描两种方式
这里还是建议使用方式二,因为这样不会有代码冗余

5、总结

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA快速入门

目录 1. 概述 2. 安装 3. 激活 4. 关闭自动更新 5. 创建Java项目 5.1 配置JRE 5.2 创建项目 6. 配置设置 6.1 主题 6.2 设置字体默认大小 6.3 鼠标滚轮改变字体大小 6.4 设置自动导入 6.5 项目选择 7. lombok插件 7.1 安装插件 7.2 启用注解 8. 安装包及插件…

linux-进程(2)

1.通过系统调用获取进程标示符 进程id(PID) 父进程id(PPID) 每一个可执行程序运行起来之后都会成为一个进程,每个进程都有一个自己的id,以及一个父进程id,父进程就是创建自己进程的进程&#xf…

一条龙-T检验+绘制boxplot

1.输入文件: 2.代码 #title:boxplot-5utr-cds-3tr-ATCG的百分比分布和T检验_封装函数版 rm(listls(allTRUE)) setwd("E:/R/Rscripts/5UTR_ABD_TE") library(tidyverse) library(ggplot2) # library(RColorBrewer) library(patchwork) library(dplyr) l…

Python-100-Days: Day01

Day01 Python简介 1.1989年Guido von Rossum在圣诞节之夜开始着手python语言编译器的编写。 2.1991年2月 Python v1 编译器诞生,使用C实现的,此时可以调用C的库函数。 3.1994年1月,Python v1.0 正式版发布。 4.2000年10月16日&#xff0…

新药品注册分类5大类的注册标准

在医药行业的浩瀚海洋中,药品注册分类就如同一座明亮的航标灯,指引着每一款新药从实验室走向市场,从理论概念变成患者手中的生命希望。本文将深入探讨化学药、中药、生物药的药品注册分类标准,药品分类常见问题、以及如何高效查询…

linux系统-深入学习文件系统与日志分析

目录 一、inode于block inode于block概括inode的内容inode包含文件的元信息用stat命令可以查看某个文件的inode信息Linux系统文件三个主要的时间属性目录文件架构 用户通过文件名打开文件时,系统内部的过程查看inode号码的实操硬盘分区后的结构 👇用户访…

走向大规模应用之前,DePIN 如何突破技术、数据与市场之网

近期,随着分布式物理基础设施网络(DePIN)的快速演变,一个旨在利用区块链技术彻底改造传统基础设施模型的新兴生态系统正在逐渐浮现。2024 年 4 月,以 peaq 为代表的 DePIN 项目成功筹集了 1500 万美元用于生态系统的扩…

mac配置maven

在 macOS 上配置 Maven 也相对简单。以下是一种常用的方法: 1. 安装maven **下载 Maven:**首先,你需要从 Maven 官网(https://maven.apache.org/download.cgi)下载最新版本的 Maven。你可以选择二进制压缩包&#xf…

02.Scala简单演示

Scala创建对象的方法与Java有所不同 class可以直接传入形参; 形式为 变量名称:变量类型 逗号隔开 ** ** 方法定义也比较特殊 ** ** def方法名():返回值 { } 其中返回值Unit 等价于Java中的void

系统服务(22年国赛)—— 磁盘管理(压缩去重)

前言:原文在我的博客网站中,持续更新数通、系统方面的知识,欢迎来访! 系统服务(22年国赛)—— 磁盘管理(压缩&&去重)https://myweb.myskillstree.cn/90.html 目录 StorageSrv 安装并创建vdo 将…

多输入多输出 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机多输入多输出预测

多输入多输出 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机多输入多输出预测 目录 多输入多输出 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 Matlab实现WOA-LSSVM鲸鱼算法优化…

STL_vector源码剖析

STL vector STL2.91源码地址: https://github.com/lewischeng-ms/sgi-stl 侯捷老师用的是 2.91,不同版本的STL差异很大,靠后版本的STL用了太多typedef以及继承关系,导致可读性很差。 本文参考博客: https://blog.csdn.net/weixin_45389639/article/detai…

记账本React案例(Redux管理状态)

文章目录 整体架构流程 环境搭建 创建项目 技术细节 一、别名路径配置 1.路径解析配置(webpack) ,将/解析为src/ 2.路径联想配置(vsCode),使用vscode编辑器时,自动联想出来src文件夹下的…

python-excel自动化-openpyxl

openpyxl学习笔记 创建或打开表格存储和遍历数据设置单元格风格过滤器和排序更改工作表的背景颜色合并单元格冻结窗口数字格式公式图像图表条形图折线图散点图 创建或打开表格 # 创建 import datetime from openpyxl import Workbook # 实例化 wb Workbook() # 激活 work…

使用Excel生成sql脚本(insert/update/delete)

目录 前言 一、Excel文件脚本变量 二、操作示例 前言 在系统使用初期,存在某种原因,需要对数据库数据进行批量处理操作。往往都是通过制定Excel表格,通过Excel导入到数据库中,所以就弄一个excel生成sql的导入脚本,希…

探索设计模式的魅力:AI赋能分层模式,解构未来,智领风潮

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,坚持默默的做事。 探索设计模式的魅力:AI赋能分层模式,解构未来,智领风潮 ✨欢迎…

【网络安全】安全事件管理处置 — 安全事件处置思路指导

专栏文章索引:网络安全 有问题可私聊:QQ:3375119339 目录 一、处理DDOS事件 1.准备工作 2.预防工作 3.检测与分析 4.限制、消除 5.证据收集 二、处理恶意代码事件 1.准备 2.预防 3.检测与分析 4.限制 5.证据收集 6.消除与恢复 …

【Leetcode】vector刷题

🔥个人主页:Quitecoder 🔥专栏:Leetcode刷题 目录 1.只出现一次的数字2.杨辉三角3.删除有序数组中的重复项4.只出现一次的数字II5.只出现一次的数字III6.电话号码的字母组合 1.只出现一次的数字 题目链接:136.只出现一…

linux 编译opencv遇到问题

linux编译opencv4.8的时候遇到问题 Error: suffix or operands invalid for vpand看到很多说法是升级as这个工具的版本,自测是从2.20升级到2.27就可以了

python提取date的月份和天数

在Python编程中,经常需要从日期中提取月份和天数。这在数据处理、分析和可视化等领域都是非常常见的操作。 本文将介绍如何使用Python提取日期中的月份和天数,并通过代码示例展示具体的实现方法。 1.使用datetime模块获取日期信息 要提取日期的月份和天…