# 从浅入深 学习 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.Options
			readTimeout: 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.BarRequestInterceptor
			decode404: 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.yml

server:
  port: 9002 #端口
#  port: ${port:9002}  # 启动端口设置为动态传参,如果未传参数,默认端口为 9002

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
#    url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
    url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8
    username: 'root'
    password: '012311'
  application:
    name: service-order #服务名称
  jpa:
    database: MySQL
    show-sql: true
    open-in-view: true

eureka:  # 配置 Eureka
  client:
    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、运行(eureka_service, product_service, order_service)三个启动类 ,进行测试

浏览器地址栏输入:http://127.0.0.1:9002/order/buy/1
在 idea 控制台 Console 中查看日志信息。

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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

段子手-168

你的鼓励将是我你的创作最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值