SpringCloudFeign远程调用
文章目录
- 1. Feign 是什么
- 2. Feign 的使用
- 2.1 引入依赖
- 2.2 写接口
- 2.3 服务调用方
- 2.4 启动测试
- 3. Feign 日志配置
- 4. Feign 使用优化
- 5. 注意包扫描问题

1. Feign 是什么
Feign 是一个声明式、模板化的 HTTP 客户端,它是由 Netflix 开发并开源的。Feign 极大地简化了基于 HTTP 的服务间通信的开发过程,并与 Spring Cloud 进行了深度集成。
以下是 Feign 的一些特点和优势:
-
声明式 API 定义:Feign 使用接口的方式定义服务调用的 API,使得声明和使用 API 更加直观和简洁。你只需要定义接口,并使用注解来描述 API 的细节,如请求方法、请求路径、请求参数等信息。
-
整合了负载均衡:在 Spring Cloud 环境下,Feign 可以与 Ribbon 负载均衡进行集成。它可以自动将请求分发到后端的多个服务实例中,以实现负载均衡和服务发现。
-
集成了 Hystrix 断路器:Feign 直接集成了 Hystrix 断路器,可以提供服务降级和容错能力。当服务调用失败或延迟过高时,Feign 可以快速启动断路器,避免雪崩效应。
-
支持多种编码器和解码器:Feign 支持多种数据格式的编码和解码,例如 JSON、XML 等。你可以通过配置和注解来指定请求和响应的编码方式。
-
支持自定义拦截器:Feign 提供了拦截器的扩展机制,你可以在请求发出前或响应返回后对请求进行处理。这些拦截器可以用于日志记录、认证授权、请求重试等逻辑。
Feign 提供了一种简单、高效的方式来定义和使用 HTTP 客户端。它基于接口和注解,使得服务之间的调用更加直观和易于维护。同时,Feign 还集成了负载均衡和断路器等功能,可以帮助开发者构建高可用和可靠的微服务架构。
微服务之间的远程调用可以用 RestTemplate 来发起远程调用. 但是存在下面的几个问题:
•代码可读性差,编程体验不统一
•参数复杂URL难以维护
Feign 的作用就是帮助我们优雅的实现 http 请求的发送,解决上面提到的问题。
2. Feign 的使用
在实际的项目开发中我们会把各个微服务提供的供其他服务远程调用的接口 封装在一个单独的服务里.

2.1 引入依赖
在 API 服务;里引入依赖
<!--feign客户端依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
2.2 写接口
参照 服务提供的接口 写 API 中的接口

@FeignClient("user-server")
public interface UserApi {@GetMapping("user/{userId}")String hello(@PathVariable("userId") Integer userId);}
user-server 是微服务的服务名
2.3 服务调用方
服务调用方要做如下改动:
-
引入依赖
<dependency><groupId>com.snow</groupId><artifactId>api</artifactId><version>1.0-SNAPSHOT</version></dependency> -
启动类加配置
启动类上加一行配置@EnableFeignClients(basePackages = {"com.snow.api"})com.snow.api 表示 API 的包
-
实际调用

2.4 启动测试
略…
3. Feign 日志配置
基于配置文件修改feign的日志级别可以针对单个服务:
feign: client:config: user-server: # 针对某个微服务的配置loggerLevel: FULL # 日志级别
也可以针对所有服务:
feign: client:config: default: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置loggerLevel: FULL # 日志级别
而日志的级别分为四种:
- NONE:不记录任何日志信息,这是默认值。
- BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
- HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息
- FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。
4. Feign 使用优化
Feign 底层发起 http 请求,依赖于其它的框架。其底层客户端实现包括:
• URLConnection:默认实现,不支持连接池
• Apache HttpClient :支持连接池
• OKHttp:支持连接池
因此提高 Feign 的性能主要手段就是使用 连接池 代替默认的 URLConnection。
这里我们用 Apache 的 HttpClient 来演示。
1)引入依赖
在 order-server 的 pom 文件中引入 Apache 的 HttpClient 依赖:
<!--httpClient的依赖 -->
<dependency><groupId>io.github.openfeign</groupId><artifactId>feign-httpclient</artifactId>
</dependency>
2)配置连接池
在 order-server 的 application.yml 中添加配置:
feign:client:config:default: # default全局的配置loggerLevel: BASIC # 日志级别,BASIC就是基本的请求和响应信息httpclient:enabled: true # 开启feign对HttpClient的支持max-connections: 200 # 最大的连接数max-connections-per-route: 50 # 每个路径的最大连接数
接下来,在 FeignClientFactoryBean 中的 loadBalance 方法中打断点:

Debug方式启动order-service服务,可以看到这里的client,底层就是Apache HttpClient:

5. 注意包扫描问题
服务调用方的启动类上.
方式一:
指定 Feign 应该扫描的包:
@EnableFeignClients(basePackages = "com.snow.api")
方式二:
指定需要加载的 Client 接口:
@EnableFeignClients(clients = {UserApi.class})

相关文章:
SpringCloudFeign远程调用
文章目录 1. Feign 是什么2. Feign 的使用2.1 引入依赖2.2 写接口2.3 服务调用方2.4 启动测试 3. Feign 日志配置4. Feign 使用优化5. 注意包扫描问题 1. Feign 是什么 Feign 是一个声明式、模板化的 HTTP 客户端,它是由 Netflix 开发并开源的。Feign 极大地简化了…...
Java中List、Set、Map三种集合之间的区别
Java中List、Set、Map三种集合之间的区别 1. List2. Set3. Map 在Java中,List、Set和Map是三种常见的集合类型,它们之间也有一些重要的区别: 1. List List是有序集合,可以存储重复元素。List的实现类常见有ArrayList、LinkedLis…...
SpringMVC之DispatcherServlet组件
目录 一、SpringMVC的核心处理流程二、DispatcherServlet1、init()方法2、doDispatch()方法3、AbstractAnnotationConfigDispatcherServletInitializer类 一、SpringMVC的核心处理流程 请求到达 DispatcherServlet DispatcherServlet 的请求处理: DispatcherServlet…...
抢商家、夺用户、比低价,抖音、快手、小红书“奇招尽出”
随着流量红利逐渐消退,国内电商平台之间互相内卷已成为了行业常态,而无论是在该领域深耕已久的淘宝、京东、拼多多等电商巨头,还是新跨界而来的抖音、快手、小红书等电商新秀都在不断地进行创新,以便为商家提供更好的服务…...
ChatGPT引领的AI面试攻略系列:AI全栈工程师篇
系列文章目录 AI全栈工程师(本文) 文章目录 系列文章目录一、前言二、面试题1. 基础理论与数据处理2. 机器学习3. 深度学习4. 大模型与迁移学习5. 计算机视觉6. 自然语言处理(NLP)7. 多模态学习8. AI生成内容(AIGC&am…...
上位机图像处理和嵌入式模块部署(qmacvisual配置)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们谈到了qmacvisual的编译、验证码、用户登录以及流程的编辑,这部分都是基础工作。事实上,除了这些内容之外…...
EXPLAIN PLAN FOR:在Oracle中生成执行计划
目录 案例 解析 Operation类型 在Oracle中,可以使用 EXPLAIN PLAN FOR 命令来生成执行计划,然后通过 SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY(PLAN_TABLE))来查看执行计划。需要注意的是,这两个命令需要在同一个窗口下运…...
蓝桥杯 9241.飞机降落
这道题本来作者以为是可以用一些小技巧进行暴力解法的,但是后来试了一下,不能过去全部数据。 下面是对半个的题解: #include<iostream> #include<stdio.h> #include<cstring> #include<cstdlib> #include<cmath…...
数据可视化原理-腾讯-散点图
在做数据分析类的产品功能设计时,经常用到可视化方式,挖掘数据价值,表达数据的内在规律与特征展示给客户。 可是作为一个产品经理,(1)如果不能够掌握各类可视化图形的含义,就不知道哪类数据该用…...
深度学习-Pytorch实现经典AlexNet网络:山高我为峰
深度学习-Pytorch实现经典AlexNet网络之山高我为峰 深度学习中,经典网络引领一波又一波的技术革命,从LetNet到当前最火的GPT所用的Transformer,它们把AI技术不断推向高潮。2012年AlexNet大放异彩,它把深度学习技术引领第一个高峰…...
25考研习题记录
3月 汤家凤《1800》 基础篇 日期高等数学线性代数概率论3.1 P92-93 P212-214 3.4 P10-15 P10-19 极限题62题 P73-74 P170-172 行列式17题 考研竞赛凯哥每日一题 张宇高数30讲页数3.4P74...
上海计算机学会 2023年12月月赛 丙组T4 迷宫(宽度优先搜索)
第四题:T4迷宫 标签:宽度优先搜索题意:给定 n n nx m m m由 # \# #(墙)、 . . .(空地)组成的地图,求从左上角到右下角的最少步数,每次只允许上下左右移动一格࿰…...
【Boost搜索引擎项目】Day1 项目介绍+去标签和数据清洗框架搭建
🌈欢迎来到C项目专栏 🙋🏾♀️作者介绍:前PLA队员 目前是一名普通本科大三的软件工程专业学生 🌏IP坐标:湖北武汉 🍉 目前技术栈:C/C、Linux系统编程、计算机网络、数据结构、Mysq…...
站群服务器需要多大内存
站群服务器的内存需求取决于网站的数量和流量,以及服务器需要运行的应用和服务。RAKsmart小编为您整理发布站群服务器需要多大内存以及站群服务器内存需求的考虑因素。 站群服务器是一种用于托管多个网站的服务器,通常用于搜索引擎优化(SEO)和网络内容管…...
HTB Perfection
Perfection User Namp ┌──(kali㉿kali)-[~/HTB/machine/Perfection] └─$ nmap -A 10.129.226.58 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-03 21:10 EST Nmap scan report for 10....
如何远程连接MySQL数据库?
在现代互联网时代,远程连接MySQL数据库成为了许多开发者和管理员必备的技能。这不仅方便了数据的共享和管理,还可以使多个团队在全球范围内协同工作。本文将介绍如何通过天联组网实现远程连接MySQL数据库,并实现高效的信息远程通信。 天联组网…...
【 HTML 及浏览器 】前端跨页面通信
前端跨页面通信:连接分散界面的纽带 在构建复杂的前端应用时,我们常常需要在不同的页面之间进行数据通信。无论是同源页面还是非同源页面,通信机制都是实现多页面数据同步和交互的关键。本文将探讨各种前端跨页面通信的方法,并提…...
内存安全的编程语言
美国政府新颁布《回归基础构件:通往安全软件之路》 《回归基础构件:通往安全软件之路》中,白宫国家网络主任办公室(ONCD)呼吁开发者使用「内存安全的编程语言」 内存安全的编程语言 根据NSA的建议,内存…...
Excel常用公式总结非常实用
16个最实用的Excel万能公式 1、多条件判断 IF(And(条件1,条件2..条件N),条件成立返回值) IF(or(条件1,条件2..条件N),条件成立返回值) 2、多条件查找 Lookup(1,0/((条件1*条件2*...条件N)),返回值区域) 3、多条件求和 Sumifs(值区域,判断区域1,条件1,判断区域2,条…...
window路径特殊字符解决
官方定义命名规范 https://learn.microsoft.com/zh-cn/windows/win32/fileio/naming-a-file 重点 1.目录规范 特殊字符以空格 与点.开头结尾 2.文件规范 特殊字符以空格 与点.开头结尾NUL、COM等文件 解决方案 字符标点符号实际上在字符集定义中有一个很有趣的现象&…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
