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等文件 解决方案 字符标点符号实际上在字符集定义中有一个很有趣的现象&…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...
鸿蒙HarmonyOS 5军旗小游戏实现指南
1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发,采用DevEco Studio实现,包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...
