news 2026/4/17 17:58:21

【微服务之服务调用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/4/18 7:01:25

YOLOv8.3图像检测实战:云端GPU 5分钟出结果,新手上路

YOLOv8.3图像检测实战&#xff1a;云端GPU 5分钟出结果&#xff0c;新手上路 你是不是也和我一样&#xff0c;喜欢拍照&#xff0c;但拍完一堆照片后却不知道怎么整理&#xff1f;尤其是去动物园、公园或者旅行时&#xff0c;成百上千张图里有猫、狗、车、人、树……想找某一张…

作者头像 李华
网站建设 2026/4/18 8:37:24

BERT智能填空Web界面如何实现?现代化UI集成实战教程

BERT智能填空Web界面如何实现&#xff1f;现代化UI集成实战教程 1. 引言 1.1 业务场景描述 在自然语言处理&#xff08;NLP&#xff09;的实际应用中&#xff0c;语义理解类任务正逐步从实验室走向产品化。其中&#xff0c;“智能填空”作为一种典型的掩码语言建模&#xff…

作者头像 李华
网站建设 2026/4/18 8:36:19

YOLOv12模型量化教程:云端GPU低成本实践,精度损失<1%

YOLOv12模型量化教程&#xff1a;云端GPU低成本实践&#xff0c;精度损失<1% 你是不是也遇到过这样的问题&#xff1f;手头有个很棒的 YOLOv12 目标检测模型&#xff0c;准确率高、识别快&#xff0c;但一想把它部署到手机或者边缘设备上&#xff0c;立马就卡住了——模型太…

作者头像 李华
网站建设 2026/4/1 2:34:15

中小企业AI落地推荐:BAAI/bge-m3低成本部署案例

中小企业AI落地推荐&#xff1a;BAAI/bge-m3低成本部署案例 1. 引言&#xff1a;中小企业为何需要语义相似度技术&#xff1f; 在当前人工智能快速发展的背景下&#xff0c;越来越多的中小企业开始探索如何将AI能力融入自身业务系统。然而&#xff0c;高昂的算力成本、复杂的…

作者头像 李华
网站建设 2026/4/10 16:44:11

Multisim14使用教程零基础入门:五分钟掌握界面布局

五分钟搞懂Multisim14界面布局&#xff1a;零基础也能上手的电路仿真入门指南你是不是刚打开Multisim14&#xff0c;面对满屏按钮和菜单一脸懵&#xff1f;别急——这几乎是每个电子初学者都会经历的“第一道坎”。传统的电路学习靠搭面包板、接线测量&#xff0c;费时费力还容…

作者头像 李华
网站建设 2026/4/18 10:54:08

Whisper Large v3 GPU优化:混合精度训练指南

Whisper Large v3 GPU优化&#xff1a;混合精度训练指南 1. 引言 随着多语言语音识别需求的不断增长&#xff0c;OpenAI推出的Whisper系列模型已成为行业标杆。其中&#xff0c;Whisper Large v3凭借其1.5B参数规模和对99种语言的支持&#xff0c;在跨语言转录与翻译任务中表…

作者头像 李华