OpenFeign详解

news/2025/2/21 18:16:56/

OpenFeign概述

Feign

Feign是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端

Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。

Feign旨在使编写Java Http客户端变得更容易。

Feign是一个声明式WebService客户端使用Feign能让编写Web Service客户端更加简单。

Feign也支持可拔插式的编码器和解码器。

它的使用方法是定义一个服务接口然后在上面添加注解。

OpenFeign

OpenFeign是Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。

OpenFeign的@Feignclient可以解析SpringMVc的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

搭建项目

在父项目中,创建子项目cloud-openFeign【前提搭建eureka单机版】

修改pom.xml

<dependencies><!-- OpenFeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!-- Eureka client--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><!-- actuator --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- SpringMVC--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</version></dependency>
</dependencies>

修改application.yml

server:port: 80
spring:application:name: cloud-openFeign
eureka:client:service-url:# Eureka server 地址defaultZone: http://localhost:7001/eureka/

启动类

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients//开启openFeign的接口扫描
public class OpenFeign8001 {public static void main(String[] args) {SpringApplication.run(OpenFeign8001.class,args);}
}

调用服务

其余项目创建接口

@RestController
@RequestMapping("/eureka/pro")
public class testController {@GetMapping("/test")public String test(){return "test";}
}

服务层【调用其余应用】

@Component
@FeignClient(value = "CLOUD-EUREKA-PRO")//调用其余应用【value是应用名】
public interface TestService {@GetMapping("/eureka/pro/test")String test();
}

控制层

@RestController
@RequestMapping("/openFeign")
public class TestController {@Autowiredprivate TestService testService;@GetMapping("/test")public String test(){return testService.test();}
}

测试

localhost:8001/openFeign/test

openFeign超时机制

openFeign超时机制

服务消费者在调用服务提供者的时候发生了阻塞、等待的情形,这个时候,服务消费者会一直等待下去

在某个峰值时刻,大呈的请求都在同时请求服务消费者,会造成线程的大呈堆积,势必会造成雪崩

利用超时机制来解决这个问题,设置一个超时时间,在这个时间段内,无法完成服务访问则自动断开连接

修改application.yml

#配置openFeign超时时间
feign:client:config:default:#连接超时时间 2sconnectTimeout: 2000#读取数据超时时间 2sreadTimeout: 2000

OpenFeign日志增强

OpenFeign日志增强

OpenFeign提供了日志增强功能,但是默认不显示任何日志,开发者可以自己配置日志的级别

OpenFeign的日志级别

NONE:默认的,不显示任何日志;

BASIC:仅记录请求方法、URL、响应状态码及执行时间;

HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息;

FULL:除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。

配置类-配置日志级别

import feign.Logger;@Configuration
public class OpenFeignConfig{/*** 日志级别定义:FULL(除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。)*/@BeanLogger.Level feignLoggerLevel(){return Logger.Level.FULL;}
}

application.yml-设置开启日志的接口

logging:level:org.example.service: debug

这里的org.example.service是openFeign接口所在的包名,当然你也可以配置一个特定的openFeign接口


http://www.ppmy.cn/news/63138.html

相关文章

【Android】跟着chatGPT学习悬浮窗的实现

请实现Android里的悬浮窗&#xff0c;这个悬浮窗里有2个TextView 实现 Android 悬浮窗需要涉及到以下几个步骤&#xff1a; 创建一个悬浮窗口的布局&#xff0c;包含两个 TextView。 创建一个 Service&#xff0c;并在 Service 的 onCreate() 方法中创建悬浮窗口。 在悬浮窗口的…

iview-admin首页的图表数据渲染问题

iview-admin的首页有几个图表&#xff0c;应该是作者自己封装的&#xff0c;有个问题是在mounted时&#xff0c;从后台获取数据&#xff0c;应该把图表根据数据重新渲染一下。 <chart-bar id"myChart" style"height: 260px;" :value"barData"…

行为型模式-中介者模式

中介者模式 概述 一般来说&#xff0c;同事类之间的关系是比较复杂的&#xff0c;多个同事类之间互相关联时&#xff0c;他们之间的关系会呈现为复杂的网状结构&#xff0c;这是一种过度耦合的架构&#xff0c;即不利于类的复用&#xff0c;也不稳定。例如在下左图中&#xf…

【JavaWeb 用户认证】Cookie、Session、Token、JWT、Interceptor、SpringBoot、Spring Security

Token基本了解&#xff1a;【详细阐述Token的来源】公钥私钥基本了解&#xff1a;【理解公钥】 文章目录 一、Cookie 经典介绍以及使用案例二、Session 经典介绍以及拦截登录案例三、Token MySQL 的基本介绍及其基本使用四、JWT 基本介绍及其基本讲解五、SpringBoot 使用拦截器…

VSAN 6.7虚拟机精简置备盘空间不回收

原创作者&#xff1a;运维工程师 谢晋 VSAN 6.7虚拟机精简置备盘空间不回收 前提 前提 客户VSAN6.7环境&#xff0c;做了Horzion7.4&#xff0c;近期发现虚拟机存储空间越来越大&#xff0c;远远超过了已分配的磁盘空间大小&#xff0c;发现是数据写入系统内即使删除了数据…

Linux — 线程池及多线程结尾

目录 一、线程池 线程池的应用场景&#xff1a; 线程池示例&#xff1a; 二、线程安全的单例模式 什么是单例模式 什么是设计模式 单例模式的特点 饿汉实现方式和懒汉实现方式 三、STL,智能指针和线程安全 四、其他常见的各种锁 五、读者写者问题(了解) 读写锁 读写…

白宫召见科技巨头 讨论AI潜在风险 以确保人们从创新中受益

ChatGPT的问世&#xff0c;被认为是通用人工智能发展的“奇点”和强人工智能即将到来的“拐点”&#xff0c;甚至有业内人士推测所有数字化系统和各个行业都可能被其重新“洗牌”。 乐观主义者表示&#xff0c;人工智能的核心是对人类大脑的模拟&#xff0c;其目的是延伸和增强…

堆(什么是堆以及怎样自己创建堆)

&#x1f381;**“我们不必非常聪明才能改变世界。我们只需要比绝大多数人更早地认识到问题&#xff0c;并付诸行动。”- 毛里茨萨克斯** &#x1f3c0;作者&#xff1a;不能再留遗憾了 &#x1f4f1;关于作者&#xff1a;博主正在学习C和Java&#xff0c;目前有些关于leetcode…