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…

windows文件夹共享设置

目录 操作如何在同个局域网下的两个主机间分享文件?(尤其是在虚拟机与物理机中) 待续、更新中 操作 如何在同个局域网下的两个主机间分享文件?(尤其是在虚拟机与物理机中) 主机A(被访问) 两个主机在一个局域网中/被访问主机位本地账户 —— 桌面新建文件夹 —— 右键设置共享…

【k8s】(七) kubernetes1.29.4离线部署之-部署网络插件

(一)kubernetes1.29.4离线部署之-安装文件准备 (二)kubernetes1.29.4离线部署之-镜像文件准备 (三)kubernetes1.29.4离线部署之-环境初始化 (四)kubernetes1.29.4离线部署之-组件安装…

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…

【Docker】Docker 中不能使用 nvidia-smi

目录 1. 问题 2. 解决方法 1. 问题 在 docker 中执行 nvidia-smi 后报错: Failed to initialize NVML: Unknown Error这个错误表示不能成功初始化NVML(Nvidia Management Library)库来管理和监测Nvidia GPU。可能的原因和解决方法如下: 检查是否正确安装并加载了…

mediasoupWork中引入本地so库

文章目录 1. gyp官方一般修改2. 尝试修改1本篇是一个bug的记录,原自一次需求对mediasoup worker层的修改需要引入一个自己的库,但是只有so库,找不到源码无法使用静态库的方式通过修改.gyp连接到worker中; 对于.gyp中so库的引入网上很难找到对应的文档,所以按照ld连接库的方…

新药品注册分类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文件夹下的…

阿里云的应用型负载均衡,网络型负载均衡,传统型负载均衡

阿里云提供了几种不同类型的负载均衡服务,各有其特定的应用场景和性能特点。这些包括应用型负载均衡(Application Load Balancer, ALB)、网络型负载均衡(Network Load Balancer, NLB)和传统型负载均衡(Clas…

四级英语之词类的确定

在四级英语中,确定词类的方法主要有以下几种: 通过句子结构确定: 当空格处的前面是冠词、形容词或及物动词时,空格处应当要填入名词。当空格处的前面是介词时,空格处是充当介词宾语的,应当填入一个名词或者…

Pytorch实用教程:nn.Linear内部是如何实现的,从哪里可以看到源码?

文章目录 nn.Linear简介nn.Linear 基本介绍nn.Linear 的参数nn.Linear源码解析查看源码的方法nn.Linear 的核心源码nn.Linear用法的示例代码示例说明示例代码代码解释nn.Linear简介 nn.Linear 是 PyTorch 中非常基础的一个模块,用于实现全连接层。下面我会详细解释它的内部实…