news 2026/9/3 3:14:39

【微服务之服务调用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/9/2 10:35:30

Emotion2Vec+ Large vs EmoReactNet:学术模型性能对比评测

Emotion2Vec Large vs EmoReactNet&#xff1a;学术模型性能对比评测 1. 引言 1.1 语音情感识别的技术背景 随着人机交互技术的不断发展&#xff0c;语音情感识别&#xff08;Speech Emotion Recognition, SER&#xff09;正逐渐成为智能系统理解用户意图与情绪状态的关键能…

作者头像 李华
网站建设 2026/9/3 0:10:33

AI读脸术行业落地报告:医疗分诊辅助系统可行性分析

AI读脸术行业落地报告&#xff1a;医疗分诊辅助系统可行性分析 1. 引言&#xff1a;AI读脸术在医疗场景中的潜在价值 随着人工智能技术的不断演进&#xff0c;基于计算机视觉的“AI读脸术”正逐步从消费级应用向专业领域渗透。其中&#xff0c;人脸属性分析——即通过图像自动…

作者头像 李华
网站建设 2026/9/3 1:08:07

手把手教学:ComfyUI上最简单的儿童动物图片生成工作流

手把手教学&#xff1a;ComfyUI上最简单的儿童动物图片生成工作流 1. 引言 1.1 儿童向图像生成的特殊需求 在AI图像生成领域&#xff0c;大多数模型专注于写实风格或艺术化表达&#xff0c;而针对儿童用户的视觉内容往往被忽视。儿童对色彩鲜艳、造型圆润、表情可爱的形象更…

作者头像 李华
网站建设 2026/9/2 23:55:18

Emotion2Vec+ Large与OpenFace多模态情感识别对比分析

Emotion2Vec Large与OpenFace多模态情感识别对比分析 1. 引言&#xff1a;多模态情感识别的技术背景与选型需求 随着人机交互技术的不断演进&#xff0c;情感识别已成为智能客服、心理健康监测、虚拟助手等场景中的关键技术。传统的情感理解依赖文本或语音单一模态&#xff0…

作者头像 李华
网站建设 2026/9/2 21:32:49

模型文件缺失?Live Avatar检查与修复操作指南

模型文件缺失&#xff1f;Live Avatar检查与修复操作指南 1. 引言 在部署和使用开源数字人模型的过程中&#xff0c;模型文件缺失是开发者最常遇到的问题之一。本文聚焦于 Live Avatar ——由阿里联合高校开源的高性能数字人生成模型&#xff0c;在实际运行中因显存限制、路径…

作者头像 李华
网站建设 2026/9/2 22:25:53

Voice Sculptor创意应用:游戏NPC语音系统搭建实战

Voice Sculptor创意应用&#xff1a;游戏NPC语音系统搭建实战 1. 引言&#xff1a;游戏NPC语音的痛点与创新方案 在现代游戏开发中&#xff0c;非玩家角色&#xff08;NPC&#xff09;是构建沉浸式世界体验的核心组成部分。然而&#xff0c;传统NPC语音制作面临诸多挑战&…

作者头像 李华