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

news/2024/9/23 4:49:33/

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

feign__3">一、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

feign___24">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__55">三、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__89">四、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)


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

相关文章

MyBatis处理SQL中的特殊字符

方式一&#xff1a;转义字符 如下案例&#xff1a; < 表示小于的转义字符 <!-- 在Mapper XML文件中定义SQL语句 --> <select id"selectById" resultMap"BaseResultMap">select *from userwhere id < #{id}; </select>方式二&am…

激活IDM下载器并配置百度网盘

前言&#xff1a; 最近想下载一些软件&#xff0c;奈何不充钱的百度网盘的速度实在太慢了&#xff0c;不到一个G的文件夹奈何下了一晚上&#xff0c;只能重新找一下idm的下载了。 但是idm的正版是需要收费的&#xff0c;所以有白嫖党的破解版就横空出世了。 正文&#xff1a…

UE5 GAS开发P34 游戏效果理论

GameplayEffects Attributes&#xff08;属性&#xff09;和Gameplay Tags&#xff08;游戏标签&#xff09;分别代表游戏中实体的特性和标识。 Attributes&#xff08;属性&#xff09;&#xff1a;Attributes是用来表示游戏中实体的特性或属性的值&#xff0c;例如生命值、…

maven报orace,jdbc错误,并出现大量红色波浪线Unresolved dependency

由于oracle的限制&#xff0c;一般我们是无法通过maven直接下载oracle的驱动包的&#xff0c;这就可能导致其余的包出现红色波浪线&#xff0c;解决方法如下 1.新建一个文件夹&#xff0c;并将oracle驱动包放在这个新建的文件夹下&#xff0c;注意不要讲这个oracle包放在maven本…

【算法刷题day37】Leetcode:738. 单调递增的数字、968. 监控二叉树

文章目录 Leetcode 738. 单调递增的数字解题思路代码总结 Leetcode 968. 监控二叉树解题思路代码总结 草稿图网站 java的Deque Leetcode 738. 单调递增的数字 题目&#xff1a;738. 单调递增的数字 解析&#xff1a;代码随想录解析 解题思路 这贪心有点巧&#xff0c;自己没想…

在 Ubuntu 22.04 上使用 Let‘s Encrypt 配置 Nginx SSL 证书

最近,我在自己的服务器上部署了一个网站,并决定使用 SSL 证书来确保网站的安全性。经过一番研究,我选择了 Lets Encrypt 作为 SSL 证书的提供商,因为它免费、自动化且广受信任。在这篇博客中,我将与大家分享我在 Ubuntu 22.04 上使用 Lets Encrypt 配置 Nginx SSL 证书的过程。…

Oracle expdp/impdp 及 exp/imp 命令详解

一、基础环境    操作系统&#xff1a;Windows 或 Linux 数据库版本&#xff1a;Oracle Database 11.2.0.1.0 及以上版本 二、命令简介    我们在使用Oracle 数据库的过程中会经常对数据进行导入导出。Oracle 数据库提供 expdp / impdp &#xff08;Data Pump&#xff0c…

Oceanbase体验之(一)运维管理工具OCP部署(社区版4.2.2)

资源规划建议 ocp主机1台 内存:64G CPU1:2C及以上 硬盘大于500G observer服务器3台 内存32G CPU&#xff1a;4C以上 硬盘大于1T 建议存储硬盘与操作系统硬盘隔开实现IO隔离 一、OBD、OCP安装包准备 [rootobserver /]# chown -R admin:admin /software/ [rootobserver /]# …