# 从浅入深 学习 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

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。