# 从浅入深 学习 SpringCloud 微服务架构(六)Feign(2)

2024-04-26 13:44

本文主要是介绍# 从浅入深 学习 SpringCloud 微服务架构(六)Feign(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

从浅入深 学习 SpringCloud 微服务架构(六)Feign(2)

一、feign 的配置:

1、从 Spring Cloud Edgware 开始,Feign 支持使用属性自定义 Feign。

对于一个指定名称的 FeignClient(例如该 Feign Client 的名称为 feignName)。

2、Feign 支持如下配置项:

feign:client:config:feignName: ## 定义 Feginclient 的名称connecttimeout: 5000 # 相当于Request.OptionsreadTimeout: 5000	# 相当于 Request.options			1oggerLevel: ful1  # 配置Feign的日志级别,相当于代码配置方式中的 Logger			errorDecoder: com.example.simpleErrorDecoder  # Feign 的错误解码器,相当于代码配置方式中的 Errordecoder			retryer: com.example.simpleRetryer  # 配置重试,相当于代码配置方式中的 Retryer			requestInterceptors:  # 配置拦截器,相当于代码配置方式中的 RequestInterceptor-com.example.FooRequestInterceptor- com.example.BarRequestInterceptordecode404: false

3、feign 配置项 参数说明:

feignName : FeginClient 的名称。
connectTimeout : 建立链接的超时时长。
readTimeout : 读取超时时长。
loggerLevel : Fegin的日志级别。
errorDecoder : Feign的错误解码器。
retryer : 配置重试。
requestInterceptors : 添加请求拦截器。
decode404 : 配置熔断不处理404异常。

二、 Feign 和 Ribbon 的联系与区别:

1、Ribbon 是一个基于 HTTP 和 TCP 客户端的负载均衡的工具。

它可以在客户端配置 RibbonServerList (服务端列表),
使用 HttpClient 或 RestTemplate 模拟 http 请求,步骤相当繁琐。

2、Feign 是在 Ribbon 的基础上进行了一次改进,是一个使用起来更加方便的 HTTP 客户端。

feign 采用接口的方式,只需要创建一个接口,然后在上面添加注解即可,
将需要调用的其他服务的方法定义成抽象方法即可,不需要自己构建 http 请求。
然后就像是调用自身工程的方法调用,而感觉不到是调用远程方法,使得编写客户端变得非常容易。

3、负载均衡

Feign 中本身已经集成了 Ribbon 依赖和自动配置,
因此我们不需要额外引入依赖,也不需要再注册 RestTemplate对象。

另外,我们可以通过 ribbon.xx 来进行全局配置。
也可以通过服务名 .ribbon.xx 来对指定服务配置。

三、feign 负载均衡测试

1、运行(eureka_service, order_service)两个启动类 和两个 product_service,进行测试

浏览器地址栏输入:http://127.0.0.1:9000/

会发现 product_service 有两个端口 9001 和 9011。

在这里插入图片描述

浏览器地址栏输入:http://127.0.0.1:9001/product/1

正常输出 mysql 数据库的第一条记录:

在这里插入图片描述

浏览器地址栏输入:http://127.0.0.1:9002/order/buy/1

正常输出 mysql 数据库的第一条记录:

在这里插入图片描述

2、启动了两个 shop_service_product,重新测试

可以发现使用 Ribbon 的轮询策略进行负载均衡。

# IDEA2019 如何打开 Run Dashboard 运行仪表面板

浏览器地址栏输入:http://127.0.0.1:9002/order/buy/1

多刷新几次,会发现,输出界面采用轮询的方式。

在这里插入图片描述

四、feign 请示压缩 和 打印 fegin 日志

1、Spring Cloud Feign 支持对请求和响应进行 GZIP 压缩,

以减少通信过程中的性能损耗。通过配置参数即可开启请求与响应的压缩功能。
也可以对请求的数据类型,以及触发压缩的大小下限进行设置。

feign:compression:request:enabled: true  # 开启请求压缩mime-types: text/html,application/xml,application/json  # 设置压缩的数据类型,默认此几个类型。min-request-size: 2048  # 设置触发压缩的大小下限,默认 2048。response:enabled: true  # 开启响应压缩

2、fegin 日志配置:

# 配置 feign 日志的输出:
# 日志配置:# NONE:不输出日志,# BASIC:适用于生产环境追踪问题,# HEADERS:在BASIC基础上记录请求和响应头信息,# FULL:记录所有。feign:client:config:service-product:  # 需要调用的服务名称loggerLevel: FULL
logging:level:djh.it.order.feign.ProductFeignClient: debug

3、在消费都子工程(子模块) order_service 中,application.yml 配置文件中,

配置 fegin 日志,进行测试。


##  spring_cloud_demo\order_service\src\main\resources\application.ymlserver:port: 9002 #端口
#  port: ${port:9002}  # 启动端口设置为动态传参,如果未传参数,默认端口为 9002spring:datasource:driver-class-name: com.mysql.jdbc.Driver
#    url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghaiurl: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8username: 'root'password: '012311'application:name: service-order #服务名称jpa:database: MySQLshow-sql: trueopen-in-view: trueeureka:  # 配置 Eurekaclient:service-url:defaultZone: http://localhost:9000/eureka/instance:prefer-ip-address: true  # 使用 ip 地址注册instance-id: ${spring.cloud.client.ip-address}:${server.port}# 配置 feign 日志的输出:
# 日志配置:NONE:不输出日志,BASIC:适用于生产环境追踪问题,HEADERS:在BASIC基础上记录请求和响应头信息,FULL:记录所有。
feign:client:config:service-product:  # 需要调用的服务名称loggerLevel: FULL
logging:level:djh.it.order.feign.ProductFeignClient: debug

4、 浏览器地址栏输入:http://127.0.0.1:9002/order/buy/1

在 idea 控制台 Console 中查看日志信息。

在这里插入图片描述
上一节关联链接:
# 从浅入深 学习 SpringCloud 微服务架构(六)Feign(1)

这篇关于# 从浅入深 学习 SpringCloud 微服务架构(六)Feign(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/937741

相关文章

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践指南

《破茧JDBC:MyBatis在SpringBoot中的轻量实践指南》MyBatis是持久层框架,简化JDBC开发,通过接口+XML/注解实现数据访问,动态代理生成实现类,支持增删改查及参数... 目录一、什么是 MyBATis二、 MyBatis 入门2.1、创建项目2.2、配置数据库连接字符串2.3、入

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.