当前位置: 首页 > java >正文

【2025版】OpenFeign快速入门

文章目录

  • OpenFeign
    • 一、引入依赖
    • 二、添加@EnableFeignClients注解
    • 三、编写Feign客户端
    • 四、调用服务
    • 五、连接池
      • 1. 引入依赖
      • 2. 开启连接池
    • 六、开启日志
    • 七、负载均衡

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>

二、添加@EnableFeignClients注解

@SpringBootApplication
@EnableFeignClients
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

三、编写Feign客户端

@FeignClient("user-service")
public interface UserClient {@GetMapping("/user/{id}")String getUser(@PathVariable Long id);
}

四、调用服务

@Autowired
private UserClient userClient;@GetMapping("/{userId}")
public String getOrder(@PathVariable Long userId) {return "订单服务调用用户服务成功,用户信息:" + userClient.getUser(userId);
}

五、连接池

Feign底层发起http请求,依赖于其它的框架。其底层支持的http客户端实现包括:

  • HttpURLConnection:默认实现,不支持连接池
  • Apache HttpClient:支持连接池
  • OKHttp:支持连接池

1. 引入依赖

<!--OK http 的依赖 -->
<dependency><groupId>io.github.openfeign</groupId><artifactId>feign-okhttp</artifactId>
</dependency>

2. 开启连接池

feign:okhttp:enabled: true # 开启OKHttp功能

再次请求,打个断点,可以看到delegate已经变成OkHttp的客户端
在这里插入图片描述

六、开启日志

OpenFeign只会在FeignClient所在包的日志级别为DEBUG时,才会输出日志。而且其日志级别有4级:

  • NONE:不记录任何日志信息,这是默认值。
  • BASIC:仅记录请求的方法,URL以及响应状态码和执行时间。
  • HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息。
  • FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。

Feign默认的日志级别就是NONE,所以默认我们看不到请求日志。

logging:level:com.paran: DEBUG
public class DefaultFeignConfig {@Beanpublic Logger.Level feignLogLevel(){return Logger.Level.FULL;}
}

局部生效:在某个FeignClient中配置,只对当前FeignClient生效
@FeignClient(value = "user-service", configuration = DefaultFeignConfig.class)

全局生效:在@EnableFeignClients中配置,针对所有FeignClient生效。
@EnableFeignClients(defaultConfiguration = DefaultFeignConfig.class)

七、负载均衡

有说在yml中配置的,这种方式会报找不到服务实例的错误,不是因为别的原因,就是加了这个配置的原因,因为把这个loadbalancer的配置去掉就不会报这个错误,一加上就报错

spring:cloud:loadbalancer:configurations: round-robin # 或 random

可以使用下面这种办法实现负载均衡

@Configuration
@LoadBalancerClient(name = "user-service",  // 服务名configuration = CustomLoadBalancerConfig.class  // 指定配置类
)
public class CustomLoadBalancerConfig {@Beanpublic ReactorServiceInstanceLoadBalancer myServiceLoadBalancer(Environment environment,LoadBalancerClientFactory clientFactory) {String serviceId = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);// 拿到延迟加载的 ServiceInstanceListSupplierObjectProvider<ServiceInstanceListSupplier> supplierProvider =clientFactory.getLazyProvider(serviceId, ServiceInstanceListSupplier.class);// 这里使用 RandomLoadBalancer:随机策略return new RandomLoadBalancer(supplierProvider, serviceId);}
}
http://www.xdnf.cn/news/7169.html

相关文章:

  • Cursor:简单三步提高生成效率
  • HJ5 进制转换【牛客网】
  • 工作流介绍
  • TIMER免疫浸润分析
  • 谷歌地球引擎GEE将多个遥感影像作为多个波段合并成一张图像并下载的方法
  • C++ deque大小操作、deque数据插入、deque数据删除
  • Linux学习笔记|GCC编译指令基础|静动态库|makefile
  • KAG:通过知识增强生成提升专业领域的大型语言模型(五)
  • Python异常处理与OOP深度解析及实战案例
  • 软件调试纵横谈-18-页堆
  • Java程序员学AI(一)
  • [强化学习的数学原理—赵世钰老师]学习笔记02-贝尔曼方程-下
  • Python 从列表中删除值的多种实用方法详解
  • C++学习:六个月从基础到就业——C++17:std::optional/variant/any
  • 玄机-第一章 应急响应-Linux日志分析
  • LoRA微调的参数学习
  • 1-机器学习的基本概念
  • 浅入ES5、ES6(ES2015)、ES2023(ES14)版本对比,及使用建议---ES6就够用(个人觉得)
  • 电子电路:什么是电子电路中的噪声?为什么会产生噪声?噪声全部是负面影响吗?
  • React-Query使用react-testing-library进行测试
  • c/c++的opencv直方图初识
  • HarmonyOS:应用文件访问(ArkTS)
  • C++算法(23):memset原理、性能对比与替代策略
  • 数据共享的艺术
  • C++中的容器
  • 进程和线程的区别和联系
  • FreeRTOS的学习记录(中断管理)
  • 5.18打卡
  • 延时双删-争议与我的思路-001
  • 动态通讯录程序