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

  • 相关阅读:
    `英语` 2022/8/25
    热门Java开发工具IDEA入门指南——IntelliJ IDEA概述(上)
    M1Mac使用UTM虚拟机最小化安装x86_64架构的Archlinux
    vue前端实现分页功能
    Part 8:Pandas数据排序【Series和DataFrame的排序操作函数】
    738. 单调递增的数字
    OLED透明屏交互技术:开创未来科技的新篇章
    WPF在.NET9中的重大更新:Windows 11 主题
    代码随想录算法训练营day31|理论基础、455.分发饼干、376. 摆动序列、53. 最大子序和
    UE5.3实现1秒12帧风格的动画抽帧效果
  • 原文地址:https://blog.csdn.net/qfyh_djh/article/details/138185022