news 2026/6/2 9:12:47

【微服务之服务调用OpenFeign】OpenFeign应用示例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【微服务之服务调用OpenFeign】OpenFeign应用示例

一 OpenFeign介绍

OpenFeign是一种基于Spring Cloud的声明式REST客户端,它简化了与HTTP服务交互的过程。它将REST客户端的定义转化为Java接口,并且可以通过注解的方式来声明请求参数、请求方式、请求头等信息,从而使得客户端的使用更加方便和简洁。同时,它还提供了负载均衡和服务发现等功能,可以与Eureka、Consul等注册中心集成使用。
参考文档:官方文档

二 调用组件Spring Cloud OpenFeign示例

1. 引入OpenFeign依赖

在父模块或服务模块引入依赖

<!-- OpenFeign服务调用--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!-- 负载均衡器--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>

2. 在启动类开启@EnableFeignClients注解

// 开启feign 功能@EnableFeignClients@EnableDiscoveryClient@SpringBootApplicationpublicclassOrderServiceApplication{publicstaticvoidmain(String[]args){SpringApplication.run(OrderServiceApplication.class,args);}}

3.编写OpenFeign客户端

// 调用自有服务@FeignClient(value="user-service")publicinterfaceUserFeignClient{@GetMapping("/user/{id}")UserEntitygetUserById(@PathVariable("id")Longid);}
//调用第三方应用服务,可以设置调用接口url@FeignClient(value="xxxxx-service",url="https://xxxxx")publicinterfaceXxxxFeignClient{@GetMapping("/xxxx/{id}")XxxxEntitygetXxxxById(@PathVariable("id")Longid);}

4.像调用本地方式一样调用远程微服务提供者

@RequestMapping("/api/order")@RestControllerpublicclassOrderController{@AutowiredUserFeignClientuserFeignClient;@GetMapping("/orderUser/{id}")publicUserEntitygetUSerById(@PathVariable("id")Longid){returnuserFeignClient.getUserById(id);}}

5.OpenFeign调用流程

三 OpenFeign其他功能支持

1. 日志配置

每个创建的 Feign 客户端都会创建一个logger。在调试程序时,配置Feign的日志了,打印出Feign的请求信息来。

  • NONE, 没日志(默认)。

  • BASIC, 只记录请求方法和URL以及响应状态代码和执行时间。

  • HEADERS, 记录基本信息以及请求和响应头。

  • FULL, 记录请求和响应的header、正文和元数据。

配置javaBean

@ConfigurationpublicclassOrderConfig{@BeanLogger.LevelfeignLoggerLevel(){returnLogger.Level.FULL;}}

添加yml 配置

spring:cloud:openfeign:client:config:#全局default:logger-level:full#对应feign服务名user-service:logger-level:full

2. 超时时间设置

open Feign使用两个超时参数:

  • connect Timeout 连接超时,可以防止由于较长的服务器处理时间而阻塞调用者。
  • readTimeout 请求处理超时,从连接建立时开始应用,当返回响应花费太长时间时触发。

添加yml 配置

spring:cloud:openfeign:client:config:#全局default:logger-level:fullconnect-timeout:3000read-timeout:3000#对应feign服务名user-service:logger-level:fullconnect-timeout:3000read-timeout:5000

3. 客户端组件配置

Feign 中默认使用 JDK 原生的 URLConnection 发送 HTTP 请求,没有连接池,可以集成别的组件来替换掉 URLConnection,比如 Apache HttpClient5,OkHttp。
父pom 引入依赖

<dependency><groupId>io.github.openfeign</groupId><artifactId>feign-hc5</artifactId></dependency>

添加yml 配置

spring:cloud:openfeign:#使用 Apache HttpClient 5httpclient:hc5:enable:trueclient:config:#全局default:logger-level:fullconnect-timeout:3000read-timeout:3000#对应feign服务名user-service:logger-level:fullconnect-timeout:3000read-timeout:5000

4.拦截器配置

通常我们调用的接口都是有权限控制的,很多时候可能认证的值是通过参数传递的,还有就是通过请求头去传递认证信息。设置feign拦截器,每次 feign 发起http调用之前,会去执行拦截器中的逻辑。
使用场景:统一添加 header 信息;对 body 中的信息做修改或替换;

packageorg.example.interceptor;importfeign.RequestInterceptor;importfeign.RequestTemplate;importjakarta.servlet.http.HttpServletRequest;importlombok.extern.slf4j.Slf4j;importorg.springframework.stereotype.Component;importorg.springframework.web.context.request.RequestContextHolder;importorg.springframework.web.context.request.ServletRequestAttributes;importjava.util.UUID;@Slf4j@ComponentpublicclassXTokenRequestInterceptorimplementsRequestInterceptor{/** * feign请求拦截器,将共享数据传到下游 * @param template */@Overridepublicvoidapply(RequestTemplatetemplate){// 业务逻辑 模拟认证逻辑ServletRequestAttributesattributes=(ServletRequestAttributes)RequestContextHolder.getRequestAttributes();if(null!=attributes){HttpServletRequestrequest=attributes.getRequest();Stringaccess_token=request.getHeader("Authorization");//设置tokentemplate.header("Authorization",access_token);}}/** * 自定义拦截器 * @return */@BeanpublicXTokenRequestInterceptorfeignAuthRequestInterceptor(){returnnewXTokenRequestInterceptor();}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/31 2:49:37

科哥开发FunASR语音识别镜像解析|支持VAD与标点恢复

科哥开发FunASR语音识别镜像解析&#xff5c;支持VAD与标点恢复 1. 技术背景与核心价值 随着语音交互技术的普及&#xff0c;高效、准确的中文语音识别系统在智能客服、会议记录、视频字幕生成等场景中发挥着关键作用。阿里达摩院开源的 FunASR 项目为开发者提供了强大的语音…

作者头像 李华
网站建设 2026/5/20 14:28:39

HNU 编译系统 实验及作业

这里是 HNU 25年秋《编译系统》课程的实验代码及作业 PDF 编译系统是计科拔尖班的课程&#xff0c;由陈果老师授课&#xff0c;实验与作业与普通班不同&#xff0c;请注意区分 仓库说明&#xff1a; Lab 1和2&#xff0c;和所有的作业 在 master 分支中Lab 3 4 5 在 origin/h…

作者头像 李华
网站建设 2026/5/20 19:08:07

Qwen3-4B代码生成实战:手把手教你开发Python计算器

Qwen3-4B代码生成实战&#xff1a;手把手教你开发Python计算器 1. 引言 1.1 学习目标 本文旨在通过一个具体且实用的项目——开发一个带图形界面的 Python 计算器&#xff0c;带领读者深入掌握如何利用 Qwen3-4B-Instruct 模型进行高质量代码生成。学习完成后&#xff0c;您…

作者头像 李华
网站建设 2026/6/1 21:57:39

VSCode中如何搭建JAVA+MAVEN开发环境?

一、前置条件&#xff08;必须先安装&#xff09;在配置 VSCode 的 Maven 环境前&#xff0c;需要先安装好以下工具&#xff1a;JDK&#xff08;推荐 JDK 8/11/17&#xff0c;Maven 对新版本 JDK 兼容性较好&#xff09;Maven&#xff08;官网下载 /apache-maven-3.6 版本&…

作者头像 李华
网站建设 2026/5/26 7:19:11

手把手教学:用ollama-webui快速体验通义千问3-14B

手把手教学&#xff1a;用ollama-webui快速体验通义千问3-14B 1. 引言 1.1 业务场景描述 在当前大模型快速发展的背景下&#xff0c;越来越多开发者希望在本地环境中快速部署并体验高性能开源语言模型。然而&#xff0c;传统部署方式往往涉及复杂的环境配置、模型下载与格式…

作者头像 李华
网站建设 2026/5/20 22:42:54

低配GPU运行方案:DeepSeek-R1-Distill-Qwen-1.5B量化部署探索

低配GPU运行方案&#xff1a;DeepSeek-R1-Distill-Qwen-1.5B量化部署探索 1. 引言 1.1 业务场景描述 随着大模型在数学推理、代码生成和逻辑推导等复杂任务中的广泛应用&#xff0c;如何在资源受限的设备上高效部署高性能推理模型成为工程落地的关键挑战。尤其对于中小企业或…

作者头像 李华