Spring Boot 整合 OpenFeign 教程

精心整理了最新的面试资料和简历模板,有需要的可以自行获取

点击前往百度网盘获取
点击前往夸克网盘获取


Spring Boot 整合 OpenFeign 教程

一、OpenFeign 简介

OpenFeign 是 Netflix 开源的声明式 HTTP 客户端,通过接口和注解简化服务间 HTTP 调用。与 Spring Cloud 深度整合后,可自动实现负载均衡(配合 Ribbon)和服务发现(配合 Eureka)。

核心特性:

  • 声明式 API:通过接口定义 HTTP 请求
  • 集成 Ribbon:自动负载均衡
  • 支持熔断降级:整合 Hystrix(可选)
  • 注解驱动:类似 Spring MVC 的注解风格

二、环境准备

1. 创建 Spring Boot 项目

使用 Spring Initializr 创建项目,选择:

  • Spring Web(基础 Web 支持)
  • Spring Cloud OpenFeign(核心依赖)

2. 添加依赖(Maven)

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>3.1.3</version> <!-- 根据 Spring Cloud 版本调整 -->
</dependency>

三、基础整合步骤

1. 启用 Feign 客户端

在启动类添加 @EnableFeignClients 注解:

@SpringBootApplication
@EnableFeignClients
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

2. 定义 Feign 客户端接口

创建接口并使用 @FeignClient 注解:

@FeignClient(name = "user-service") // 服务名称(需注册到注册中心)
public interface UserClient {@GetMapping("/users/{id}")      // 与 Spring MVC 注解一致User getUserById(@PathVariable("id") Long id);@PostMapping("/users")User createUser(@RequestBody User user);
}

3. 注入并使用客户端

在 Controller 或 Service 中直接注入接口:

@RestController
public class DemoController {@Autowiredprivate UserClient userClient;@GetMapping("/demo/{userId}")public User getDemoUser(@PathVariable Long userId) {return userClient.getUserById(userId);}
}

四、进阶配置

1. 自定义请求配置

配置超时时间(application.yml):
feign:client:config:default:  # 全局默认配置connectTimeout: 5000readTimeout: 5000user-service:  # 指定服务的配置connectTimeout: 3000readTimeout: 3000
添加请求拦截器:
public class AuthInterceptor implements RequestInterceptor {@Overridepublic void apply(RequestTemplate template) {template.header("Authorization", "Bearer " + getToken());}
}// 注册拦截器
@Configuration
public class FeignConfig {@Beanpublic AuthInterceptor authInterceptor() {return new AuthInterceptor();}
}

2. 日志调试

配置日志级别(application.yml):

logging:level:com.example.demo.client.UserClient: DEBUG

3. 熔断降级(整合 Hystrix)

添加依赖:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
定义降级类:
@Component
public class UserClientFallback implements UserClient {@Overridepublic User getUserById(Long id) {return new User(0L, "fallback-user");}
}// 客户端指定降级类
@FeignClient(name = "user-service", fallback = UserClientFallback.class)
public interface UserClient {// ...
}

五、常见问题解决

1. 404 错误排查

  • 检查目标服务接口路径是否匹配
  • 确认服务是否注册到注册中心(Eureka/Nacos)
  • 使用 @RequestMapping 确保路径一致性

2. 请求头丢失问题

  • 使用 @RequestHeader 显式传递头信息:
    @GetMapping("/users/{id}")
    User getUserById(@PathVariable Long id, @RequestHeader("X-Token") String token);
    
  • 或通过拦截器统一添加

3. 复杂参数处理

使用 @SpringQueryMap 处理 POJO 参数:

@GetMapping("/search")
List<User> searchUsers(@SpringQueryMap UserQuery query);

六、最佳实践

  1. 接口复用:将 Feign 客户端接口单独模块化
  2. 配置隔离:不同服务使用独立的配置类
  3. 异常处理:自定义 ErrorDecoder 处理异常响应
  4. 性能优化:启用 HTTP 连接池
    feign:okhttp:enabled: true
    

七、项目结构示例

src/main/java
├── com.example.demo
│   ├── Application.java          # 启动类
│   ├── config
│   │   └── FeignConfig.java      # Feign 全局配置
│   ├── controller
│   │   └── DemoController.java   # 控制器
│   ├── client
│   │   ├── UserClient.java       # Feign 客户端接口
│   │   └── fallback              
│   │       └── UserClientFallback.java # 降级实现
│   └── model
│       └── User.java             # 实体类

通过本教程,您已掌握 Spring Boot 与 OpenFeign 的核心整合方法。OpenFeign 能显著简化服务间通信,结合 Spring Cloud 生态的其他组件,可快速构建健壮的微服务系统。

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

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

相关文章

APM 仿真遥控指南

地面站开发了一段时间了&#xff0c;由于没有硬件&#xff0c;所以一直在 APM 模拟器中验证。我们已经实现了 MAVLink 消息接收和解析&#xff0c;显示无人机状态&#xff0c;给无人机发送消息&#xff0c;实现一键起飞&#xff0c;飞往指定地点&#xff0c;降落&#xff0c;返…

C语言入门教程100讲(4)输入输出

文章目录 1. 什么是输入输出&#xff1f;2. 标准输入输出函数2.1 printf 函数2.2 scanf 函数 3. 格式化占位符4. 示例代码代码解析&#xff1a;输出结果&#xff1a; 5. 常见问题问题 1&#xff1a;scanf 中的 & 是什么作用&#xff1f;问题 2&#xff1a;printf 和 scanf …

《信息系统安全》(第一次上机实验报告)

实验一 &#xff1a;网络协议分析工具Wireshark 一 实验目的 学习使用网络协议分析工具Wireshark的方法&#xff0c;并用它来分析一些协议。 二实验原理 TCP/IP协议族中网络层、传输层、应用层相关重要协议原理。网络协议分析工具Wireshark的工作原理和基本使用规则。 三 实…

城市街拍人像自拍电影风格Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色教程 城市街拍人像自拍的电影风格 Lr 调色&#xff0c;是利用 Adobe Lightroom 软件&#xff0c;对在城市街景中拍摄的人像自拍照片进行后期处理&#xff0c;使其呈现出电影画面般独特的视觉质感与艺术氛围。通过一系列调色操作&#xff0c;改变照片的色彩、明暗、对比等元…

自学Python创建强大AI:从入门到实现DeepSeek级别的AI

人工智能&#xff08;AI&#xff09;是当今科技领域最热门的方向之一&#xff0c;而Python是AI开发的首选语言。无论是机器学习、深度学习还是自然语言处理&#xff0c;Python都提供了丰富的库和工具。如果你梦想创建一个像DeepSeek这样强大的AI系统&#xff0c;本文将为你提供…

Qt/C++项目积累:4.远程升级工具 - 4.1 项目设想

背景&#xff1a; 桌面程序一般都支持远程升级&#xff0c;也是比较常用的场景设计。如酷狗音乐的升级&#xff0c;会提供两个选项&#xff0c;自动帮助安装或是新版本提醒&#xff0c;由用户来决定是否升级&#xff0c;都属于远程升级的应用及策略。 看看经过这块的功能了解及…

(一)丶Windows安装RabbitMQ可能会遇到的问题

一丶可能会忘了配置ERLang的环境变量 二丶执行命令时报错 第一步 rabbitmq-plugins enable rabbitmq_management 第二部 rabbitmqctl status 三丶修改.erlang.cookie 文件 1.找到C盘目下的.erlang.cookie文件 C:\Users\admin\.erlang.cookie C:\Windows\System32\config\sys…

Amdahl 定律

Amdahl 定律是用来表示&#xff0c;当提高系统某部分性能时对整个系统的影响&#xff0c;其公式如下&#xff1a; a表示我们提升部分初始耗时比例&#xff0c;k是我们的提升倍率&#xff0c;通过这个公式我们可以轻松的得知对每一部分的提醒&#xff0c;对整个系统带来的影响…

HW华为流程管理体系精髓提炼华为流程运营体系(124页PPT)(文末有下载方式)

资料解读&#xff1a;HW华为流程管理体系精髓提炼华为流程运营体系&#xff08;124页PPT&#xff09; 详细资料请看本解读文章的最后内容。 华为作为全球领先的科技公司&#xff0c;其流程管理体系的构建与运营是其成功的关键之一。本文将从华为流程管理体系的核心理念、构建…

Powershell WSL导出导入ubuntu22.04.5子系统

导出Linux子系统 导出位置在C盘下,根据自己的实际情况更改即可Write-Host "export ubuntu22.04.5" -ForegroundColor Green wsl --export Ubuntu-22.04 c:\Ubuntu-22.04.tar 导入Linux子系统 好处是目录可用在任意磁盘路径,便于迁移不同的设备之间Write-Host &quo…

【Attention】SKAttention

SKAttention选择核注意力 标题&#xff1a;SKAttention 期刊&#xff1a;IEEE2019 代码&#xff1a; https://github.com/implus/SKNet 简介&#xff1a; 动机:增大感受野来提升性能、多尺度信息聚合方式解决的问题&#xff1a;自适应调整感受野大小创新性:提出选择性内核…

解决Popwindow宽高的问题。

问题 在使用Popwindow进行自定义的过程中&#xff0c;需要设置popwindow的宽高。但是宽高很多时候容易出问题。比如下面的例子。 布局文件如下 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.andr…

MySQL数据库精研之旅第二期:库操作的深度探索

专栏&#xff1a;MySQL数据库成长记 个人主页&#xff1a;手握风云 目录 一、查看数据库 二、创建数据库 2.1. 语法 2.2. 示例 三、字符集编码和校验(排序)规则 3.1. 查看数据库支持的字符集编码 3.2. 查看数据库支持的排序规则 3.3. 不同的字串集与排序规则对数据库的…

基于deepseek的智能语音客服【第四讲】封装milvus数据库连接池封装

通过工厂模式创建链接 static {// 创建连接池工厂BasePooledObjectFactory<MilvusServiceClient> factory new BasePooledObjectFactory<MilvusServiceClient>() {Overridepublic MilvusServiceClient create() throws Exception {return new MilvusServiceClient…

STM32基础教程——定时器

前言 TIM定时器&#xff08;Timer&#xff09;:STM32的TIM定时器是一种功能强大的外设模块&#xff0c;通过时基单元&#xff08;包含预分频器、计数器和自动重载寄存器&#xff09;实现精准定时和计数功能。其核心原理是&#xff1a;内部时钟&#xff08;CK_INT&#xff09;或…

OpenCV旋转估计(4)生成一个字符串表示的匹配图函数 matchesGraphAsString()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 matchesGraphAsString 函数是OpenCV库中的一部分&#xff0c;位于 cv::detail 命名空间下。这个函数的主要作用是生成一个字符串表示的匹配图&am…

Android 根据Url使用Retrofit框架进行文件下载

一、背景 根据后端返回的url下载地址,去执行文件下载&#xff0c;将文件保存到SD卡。这里使用Retrofit网络框架。 二、代码实现 2.1、定义一个DownloadFileService interface DownloadFileService {StreamingGETsuspend fun downloadFile(Url fileUrl: String):ResponseBody…

NVMe(Non-Volatile Memory Express)详解

一、NVMe的定义与核心特性 NVMe&#xff08;非易失性内存主机控制器接口规范&#xff09;是一种 基于PCIe总线的高性能存储协议&#xff0c;专为固态硬盘&#xff08;SSD&#xff09;设计&#xff0c;旨在替代传统的AHCI协议&#xff08;如SATA&#xff09;。其核心特性包括&a…

机器学习——KNN超参数

sklearn.model_selection.GridSearchCV 是 scikit-learn 中用于超参数调优的核心工具&#xff0c;通过结合交叉验证和网格搜索实现模型参数的自动化优化。以下是详细介绍&#xff1a; 一、功能概述 GridSearchCV 在指定参数网格上穷举所有可能的超参数组合&#xff0c;通过交叉…