• # 从浅入深 学习 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    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  # 开启响应压缩
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2、fegin 日志配置:

    # 配置 feign 日志的输出:
    # 日志配置:
    	# NONE:不输出日志,
    	# BASIC:适用于生产环境追踪问题,
    	# HEADERS:在BASIC基础上记录请求和响应头信息,
    	# FULL:记录所有。
    
    feign:
      client:
    	config:
    		service-product:  # 需要调用的服务名称
    		  loggerLevel: FULL
    logging:
      level:
        djh.it.order.feign.ProductFeignClient: debug
    			
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    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
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

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

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

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

  • 相关阅读:
    flutter 手机卡住,需要等待,主线程被占用
    Vue2和Vue3的区别——实例创建、响应式数据代理、v-for和v-if优先级、生命周期
    webgl(three.js)实现室内三维定位,3D定位,3D楼宇bim、实时定位三维可视化解决方案——第十四课(定位升级版)
    C++多线程学习08 使用list和互斥锁进行线程通信
    msys2 ffmpeg库编译安装(Windows篇)
    智慧城市与数字孪生:共创未来城市的智慧生活
    微服务项目:尚融宝(49)(核心业务流程:标的管理(1))
    三、stm32-USART串口通讯(重定向、接发通信、控制LED亮灭)
    组原必备知识点
    日志中打印统计信息的方案
  • 原文地址:https://blog.csdn.net/qfyh_djh/article/details/138185022