Springboot整合 Spring Cloud OpenFeign

Spring Boot中单独使用OpenFeign代替HttpClient/RestTemplate 背景 在Spring Boot项目中,有时候需要访问其他服务,用到的客户端技术一般是使用HttpClient或者RestTemplate封装为一个小工具类,这种方法可行,但是有些缺点: 请求的URL很分散,不一样维护 响应信息需要重新反序列化 所以,有没有更好的解决方案,让我们就像controller调用service那样来直接调用其他服务,并且不需要反序列化,直接自动把响应结果封装成为一个对象? 有的!OpenFeign可以在SpringBoot中单独使用!及其方便! 说明:现在使用的是Spring 阅读详情
AI摘要

本文介绍了如何在SpringCloud环境下使用OpenFeign进行服务间调用,包括引入依赖、编写FeignClient接口、配置日志级别、超时时间和自定义拦截器。重点讲解了整合OpenFeign、全局和局部配置,以及如何处理异常情况。

1.OpenFeign简介

1.相比于Netflix Feign,OpenFeign支持Spring MVC注解,整合了Ribbon(springcloud在Hoxton.M2 RELEASED版本之后舍弃Ribbon。需手动引入spring-cloud-loadbalancer)和Nacos。
2.使得开发人员调用远程接口或者服务之间相互调用就像调用本地方法一样。

2.整合OpenFeign

1.引入OpenFeign依赖
<!--查看是否引入SpringCloud 版本依赖-->
<dependencyManagement>
	<dependencies>
      <!-- SpringCloud 版本依赖 -->
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-dependencies</artifactId>
          <version>${spring-cloud.version}</version>
          <type>pom</type>
          <scope>import</scope>
      </dependency>
	</dependencies>
</dependencyManagement>

<dependencies>
	<!--openFeign-->
	<dependency>
	    <groupId>org.springframework.cloud</groupId>
	    <artifactId>spring-cloud-starter-openfeign</artifactId>
	</dependency>
	<!--loadbalancer-->
	<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    </dependency>
</dependencies>
2.编写调用接口+@FeignClient
FeignClient常用属性:

name:指定FeignClient的名称,项目若整合注册中心(nacos),name属性会作为服务的名称,用于服务发现。
url:可以手动指定@FeignClient调用的地址。
decode404:当发生http 404错误时,如果该字段位true,会调用decoder进行解码,否则抛出FeignException
configuration:Feign配置类,可以自定义Feign的Encoder、Decoder、LogLevel、Contract
fallback:定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现				@FeignClient标记的接口
fallbackFactory:工厂类,用于生成fallback类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复的代码
path:定义当前FeignClient的统一前缀,当我们项目中配置了server.context-path,server.servlet-path时使用
@FeignClient(name = "servie-name")
public interface SystemFeignService {

    @PostMapping(value = "/xxx/xxxx")
    void updateXxxxx(@RequestBody Object object);

    @GetMapping(value = "/xxx/xxxx")
    SysUser selectXxxx(@RequestParam(value = "str") String str);

    @GetMapping(value = "/xxx/{key}")
    String getConfigKeyXxxxx(@PathVariable(value = "key") String key);
}
3.启动类添加@EnableFeignClients开启FeignCleint

在这里插入图片描述

3.OpenFeign自定义配置

1.日志配置
接口调试、查看接口响应时间等
1)全局配置,定义配置类并指定日志级别
日志级别分为4种:
	NONE:不记录任何日志。适用于生产(默认值)。
	BASIC:仅记录请求方法,URL,响应状态代码以及执行时间。适应于生产追踪问题。
	HEADERS:在BASIC基础上,记录请求和响应的header。
	FULL:记录请求和响应的header,body和元数据。
	
注:OpenFeign的日志级别为debug,Springboot默认的级别是info级别比OpenFeign要高,所以OpenFeign日期不会输出,需要在配置文件中设置feign接口所在目录的日志级别。
logging:
  level:
    com.initial.openFeign.service: debug
@Configuration //添加@Configuration注解表明全局有效
public class FeignConfig{

    @Bean
    public Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }

}
日志输出:

在这里插入图片描述

2)局部配置-配置类
1.将OpenFeign日志配置类上的@Configuration 去除
2.@FeignClient接口添加 configuration = FeignConfig.class
//@Configuration //添加@Configuration注解表明全局有效
public class FeignConfig{

    @Bean
    public Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }

}
@FeignClient(name = "servie-name",configuration = FeignConfig.class)
public interface SystemFeignService {

    @PostMapping(value = "/xxx/xxxx")
    void updateXxxxx(@RequestBody Object object);

    @GetMapping(value = "/xxx/xxxx")
    SysUser selectXxxx(@RequestParam(value = "str") String str);

    @GetMapping(value = "/xxx/{key}")
    String getConfigKeyXxxxx(@PathVariable(value = "key") String key);
}
日志输出:

在这里插入图片描述

2)局部配置-配置文件
消费端配置文件中添加
spring:
  cloud:
    openfeign:
      client:
        config:
          ##调用的服务名
          servie-name:
          ##日志级别
            logger-level: FULL
2.超时时间配置
通过Options可以配置连接超时时间和读取超时时间,Options的第一个参数是连接的超时时间(ms),默认值是2s,第二个参数是请求处理的超时时间(ms),默认值是5s。
1)全局配置-配置类(局部配置不进行演示了)
@Configuration //添加@Configuration注解表明全局有效
public class FeignConfig {

    @Bean
    public Logger.Level feignLoggerLevel(){
        return Logger.Level.BASIC;
    }

    @Bean
    public Request.Options feignOptions(){
    	//这里设置请求处理超时时间为3s钟
        return new Request.Options(5000,3000);
    }
}
@FeignClient(name = "servie-name")
public interface SystemFeignService {

    @PostMapping(value = "/xxx/xxxx")
    void updateXxxxx(@RequestBody Object object);

    @GetMapping(value = "/xxx/xxxx")
    SysUser selectXxxx(@RequestParam(value = "str") String str);

    @GetMapping(value = "/xxx/{key}")
    String getConfigKeyXxxxx(@PathVariable(value = "key") String key);
}
服务端接口睡眠5s钟
try {
    Thread.sleep(5000);
} catch (InterruptedException e) {
    throw new RuntimeException(e);
}
请求处理超时报错:

在这里插入图片描述

2)局部配置-配置文件
消费端配置文件中添加
spring:
  cloud:
    openfeign:
      client:
        config:
          ##调用的服务名
          servie-name:
          	##日志级别
            logger-level: FULL
            #连接超时时间
            connect-timeout: 5000
            #连接成功后,请求处理超时时间
            read-timeout: 3000
请求处理超时报错:

在这里插入图片描述

3.自定义拦截器
可以处理服务调用时token的传递等。
全局配置类
@Configuration
public class FeignTokenInterceptor implements RequestInterceptor {

    @Override
    public void apply(RequestTemplate requestTemplate) {
        String feignUrl = requestTemplate.url();
        if (feignUrl.contains("/xxlJob/")) {
            // 处理 xxljob 调用feign接口 丢失请求头
            RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(new MockHttpServletRequest()));
        } else {
            HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
            String token = request.getHeader(Constants.ACCESS_TOKEN_KEY);
            if (StringUtils.isNotEmpty(token)) {
                requestTemplate.header(Constants.ACCESS_TOKEN_KEY, token);
            }
        }
        requestTemplate.header("X-Forwarded-For", IpUtils.getIpAddr(WebUtils.getRequest().get()));

    }

}
4.Feign远程调用丢失请求头原因

在这里插入图片描述

Springcloud项目整合openfeigin springcloud整合openfeigin实现第三方效验接口提示:以下是本篇文章正文内容,下面案例可供参考以上就是使用 OpenFeign 实现远程服务调用的基本步骤。通过定义 Feign 接口,并使用注解来声明服务调用的细节,可以使得代码更加清晰和简洁。 阅读详情

相关推荐

SpringBoot openFeign的学习使用

1.导入依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>2.1.0.RELEASE</version> </dependency> 2.在SpringBoot的启动类上开启注解 (@E

hugbs的博客 601

SpringBoot集成OpenFeign

SpringBoot2.x集成OpenFeign

AG.『Feng』的博客 9338

SpringBoot 整合SpringCloud小demo

2.4.1服务网关 大家都知道现在springcloud自带的服务网关为Zuul。 Zuul是什么? Zuul是Spring Cloud全家桶中的微服务API网关。 所有从设备或网站来的请求都会经过Zuul到达后端的Netflix应用程序。作为一个边界性质的应用程序,Zuul提供了动态路由、监控、弹性负载和安全功能。Zuul底层利用各种filter实现如下功能: 认证和安全 识别每个需要认证的资源,拒绝不符合要求的请求。 性能监测 在服务边界追踪并统计数据,提供精确的生产视图。 动...

junmoxiao156213的博客 868

SpringBoot实战(十八)集成OpenFeign

SpringBoot实战(十八)集成Feign

ACGkaka的博客 4733

flink定位反压节点

在 Apache Flink 中定位反压(Backpressure)节点需要结合监控工具和作业行为分析。

2301_80954266的博客 1045

Amesim(五):单个悬架系统搭建

一、组成 单个悬架系统组成包括:端子,质量块*2,弹簧,阻尼器,速度路面反馈,路面激励。 二、搭建 打开Amesim,在 library 选择 1D Mechanical 选择质量模块,添加到skech中,并按 ctrl+r 旋转质量块,将箭头朝上,设置规定的力传递正方向 添加弹簧阻尼器,与质量块连接 添加VX模块,将路面的激励传递转化为速度和位移,传递给悬架系统 在...

林小川的博客 7166

Spring Boot 整合 Spring Cloud 和 Spring Cloud Alibaba (一) 【nacos 注册中心 和 OpenFeign 远程调用】

参考文档:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md Spring Cloud 、Spring Cloud Alibaba、Spring Boot之间的关系 参考:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E Spring Cloud Alibaba如何使用 在 pom.x

weixin_32196893的博客 643

RPA实战:手把手教你打造抖音自动养号机器人(含避坑指南)

本文详细介绍了如何利用RPA技术从零构建一个智能化的抖音自动养号机器人。内容涵盖环境准备、核心工具选型、拟人化行为流程设计、代码实现模块拆解,并提供了关键的避坑指南与风控对抗策略,帮助开发者高效、稳定地实现账号自动化运营。

orange的博客 557

基于SpringBoot,Spring Cloud的微服务框架,整合Gateway、Config、Ribbon、Hystrix、Eureka、OpenFeign

基于SpringBoot,Spring Cloud的微服务框架,整合Gateway、Config、Ribbon、Hystrix、Eureka、OpenFeign GitHub路径:https://github.com/wuyue930912/cloud-pet-hub.git Coding路径:https://e.coding.net/pethub/hub/pet-hub.git

大西瓜的博客 2790

【深度学习|学习笔记】广义线性模型Generalized linear model(GLM)模型详解,附代码。

【深度学习|学习笔记】广义线性模型Generalized linear model(GLM)模型详解,附代码。

2401_89898861的博客 1871

OpenCV实战系列——图像线条提取

基于内容的图像分析,需要从构成图像的像素集合中提取有意义的特征。轮廓、线条、区域等是基本的图像基元,可用于描述图像中包含的元素。本节将介绍如何提取重要的图像线条特征。

m0_58523831的博客 1万+

SpringBoot整合Nacos实战:配置管理、服务发现与避坑指南

在微服务架构实践中,配置管理与服务发现是两大核心支撑能力。传统应用修改配置往往需要重启,而服务间直连IP在实例动态扩缩容时会频繁失效。配置中心将配置集中化,实现修改实时生效;注册中心让服务实例自动注册、发现与负载均衡。SpringBoot生态中,Nacos同时提供这两类能力,成为众多团队从单体走向微服务的首选。从版本对应关系、环境搭建,到配置动态刷新机制,再到服务注册与调用的完整链路,以及端口偏移、Data ID不匹配等典型问题的排查思路,都可以在SpringBoot整合Nacos的过程中形成一套可复用的落

weixin_33853794的博客 178

人工智能训练师三级考试备考全攻略|报名条件+真题+补贴申领一站式通关(2026版)

本专栏是人工智能训练师三级考证最完整的备考指南,共77篇文章,覆盖从职业认知、报名实操、AI基础知识、数据标注、模型训练测试部署、考前冲刺到考后进阶的全链路。本导读按模块整理了全部文章链接,帮你快速定位所需内容。人工智能训练师是国家认定的正式职业,证书可在osta.mohrss.gov.cn查询,三级证书可申领最高3120元技能补贴。

白话机器学习 1779

Spring Boot集成Spring Cloud OpenFeign进行声明式REST客户端

Spring Cloud OpenFeign是一个声明式的REST客户端,它使得编写Web服务客户端变得更加简单。Spring Cloud OpenFeign为Spring Boot应用提供了一种声明式的服务调用方式,简化了客户端的开发。OpenFeign是Netflix的一个开源项目,Spring Cloud OpenFeign是它的Spring Cloud兼容版本。它简化了编写Web服务客户端的过程,允许开发者通过定义Java接口的方式来声明对其他服务的调用。:Feign支持请求和响应的GZIP压缩。

技术研究中心 965

Flutter 自适应布局一套代码适配手机和平板(12)

通过LayoutBuilder组件动态检测屏幕尺寸,根据宽度阈值(600px)选择不同布局方式。在小屏幕上显示单页联系人分组,大屏幕采用侧边栏+详情面板的并排布局。核心实现包括:1)使用LayoutBuilder获取父容器约束条件;2)定义大屏幕和小屏幕的布局断点;3)构建响应式界面组件,其中大屏幕布局采用Row横向排列固定宽度侧边栏和弹性宽度的详情区域。这种方案可确保应用在不同设备上都能提供最佳显示效果。

hello.reader 315

UE5 蓝图节点图文大全(300+蓝图,9万字+)

本文采用虚幻5.2.1版本,以图文的方式对蓝图节点进行介绍,包括蓝图节点的输入输出参数解释,并有中英文节点名称可参考。

一碗清深的博客 2万+

OpenFeign 整合 Spring boot

OpenFeign 是Spring Cloud在feign的基础上支持了SpringMVC的注解,如@RequestMapping等。OpenFeign的@FeignClint可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其它服务 ...

weixin_41144193的博客 1887

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

SpringBoot+SpringCloud+Eureka+OpenFeign(融合版)

SpringBoot+Springloud+Eureka+Openfeign

qq_44327755的博客 1953

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SpringBoot版本升级

SpringBoot版本升级2.4.13

yahe的博客 5559

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

spring-cloud-openfeign 3.0.0(对应spring boot 2.4.x之前版本)之前版本feign整合ribbon请求流程

spring-cloud-openfeign(spring 2.4.x之前) 3.0.0之前版本feign整合ribbon请求流程

zlpzlpzyd的专栏 828

SpringBoot与OpenFeign整合,实现微服务之间的声明式API调用系统

通过声明式的API调用,开发者可以专注于业务逻辑的实现,而不必担心底层的网络通信细节。接口来执行实际的 HTTP 请求。服务发现:结合Spring Cloud Eureka或Consul等服务注册中心,可以通过服务名称自动发现并调用相应的服务实例。集成测试:通过SpringBootTest框架,可以方便地进行集成测试,验证服务间的通信是否正常。,用于存储相关的配置信息,如 Encoder、Decoder、Interceptor 等。减少样板代码:无需手动编写底层的HTTP请求代码,减少了重复的工作量。

qq_18244417的博客 1242

Learn Spring Cloud

1.单体架构:所有的项目模块都写在同一个工程中,项目部署时需要对所有模块一起编译打包。2.微服务结构:将单体架构中的功能模块从单体应用中拆分出来,独立部署为多个服务。

m0_73922877的博客 1085

告别 OpenFeign!Spring 6 原生 HttpExchange 微服务调用实战指南

在。

fuladulu的博客 1026

SpringBoot整合SpringCloud+nacos+feign

最近因为项目需求,要将一个SpringBoot项目A整合进一个分布式项目B中,项目B的技术栈为SpringCloud Alibaba+nacos+openfeign。

JJ_code的博客 863

系统集成Nacos和Feign

nacos 是用于构建、交付和管理微服务的平台,支持服务发现与配置管理。 Feign 是 Java 语言的 HTTP 客户端,通过接口与注解的方式来创建一个 Feign。 引入依赖 因为nacos默认使用的均衡负载组件为ribbon,而OpenFeign最新版本默认使用的是spring cloud loadbalancer,所以我们需要排除ribbon依赖,并引入spring cloud loadbalancer依赖。 因为nacos支持配置管理,所以需要引入spring cloud starter boo

weixin_54227075的博客 2455
上一篇: Ribbon-负载均衡
下一篇: Springboot整合 Spring Cloud Alibaba Sentinel
Java_Scholar0
博客等级 码龄9年 104粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值