SpringCloud OpenFeign与Ribbon客户端配置详解

目录
  • 一、前言
  • 二、OpenFeign与Ribbon配置
    • 1、OpenFeign默认处理请求超时时间
      • 1.1、模拟处理请求0.5秒
      • 1.2、模拟处理请求1秒
    • 2、Ribbon配置
      • 2.1、配置请求处理超时5秒
      • 2.2、模拟请求处理5秒
    • 3、OpenFeign配置
      • 3.1、配置请求处理超时6秒
      • 3.2、OpenFeign配置对全部服务有效
      • 3.3、针对某个服务

一、前言

OpenFeign为微服务架构下服务之间的调用提供了解决方案,OpenFeign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用OpenFeign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问HTTP请求。但是如果请求连接超时、处理请求超时怎么办,如果我们放任不管听之任之势必造成服务雪崩,客户电话打爆投诉,背锅的又会是谁呢?所以本篇文章我们来探究一下超时处理:

二、OpenFeign与Ribbon配置

这里的例子可以在本专栏里面找到,也可以自己手动试试。

1、OpenFeign默认处理请求超时时间

1.1、模拟处理请求0.5秒

    @Override
    public String feign(String str) {
        try {
            // 模拟处理请求超时
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "Hello " + str + ":";
    }

用postman请求看下feign调用结果:

可以看到正常执行并返回了结果。 我们继续看下面的一组实验:

1.2、模拟处理请求1秒

    @Override
    public String feign(String str) {
        try {
            // 模拟处理请求超时熔断
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "Hello " + str + ":";
    }

用postman请求看下feign调用结果:

响应结果是“网络繁忙,请稍后再试试!!!” ,可见请求超时了会降级处理。所以OpenFeign默认处理请求操作超时时间为1秒。这个时间确实是快了点!

2、Ribbon配置

2.1、配置请求处理超时5秒

ribbon:
  eureka:
    enabled: false #由于使用Nacos,而不是Eureka
  eager-load:
    enabled: true #饥饿加载,系统启动时创建好ribbon客户端而不是在使用时去创建
  ConnectTimeout: 5000 #单位ms,请求连接超时时间 那这里1分钟
  ReadTimeout: 5000 #单位ms,请求处理的超时时间
  OkToRetryOnAllOperations: false #对所有操作请求都进行重试
  MaxAutoRetriesNextServer: 0 #切换实例的重试次数
  MaxAutoRetries: 0 #对当前实例的重试次数
  ServerListRefreshInterval: 2000 #从源刷新服务器列表的间隔
  NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RetryRule

用postman请求看下feign调用结果:

可见Ribbon中配置的超时时间5秒相对于模拟睡眠时间1秒较长,睡眠时间过了处理完请求,返回正常结果。

2.2、模拟请求处理5秒

    @Override
    public String feign(String str) {
        try {
            // 模拟处理请求超时熔断
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "Hello " + str + ":";
    }

用postman请求看下feign调用结果:

响应结果是“网络繁忙,请稍后再试试!!!” ,可见请求超时了会降级处理。所以处理请求操作不能时间不能超过Ribbon配置的处理请求超时时间,否则会被降级处理(自己定义降级处理)!

3、OpenFeign配置

3.1、配置请求处理超时6秒

用postman请求看下feign调用结果:feign:
  sentinel:
    enabled: true
    # 设置 feign 超时时间,优先级高于ribbon配置
  client:
    config:
      # default 设置的全局超时时间,指定服务名称可以设置单个服务的超时时间
      default:
        connectTimeout: 6000
        readTimeout: 6000

可见虽然Ribbon中配置的超时时间5秒,但是feign配置的处理请求超时时间为6秒,相对于模拟睡眠时间5秒大于ribbon配置时间小于feign配置时间并且处理完请求,返回正常结果。那么feign的配置覆盖了ribbon配置的超时时间,feign的配置优先级高于ribbon的。

3.2、OpenFeign配置对全部服务有效

feign:
  hystrix:
    # Feign启用断路器,默认为FALSE
    enabled: true
  client:
    config:
      # 针对所有的服务
      default:
        # Feign的连接建立超时时间,默认为10秒
        connectTimeout: 5000
        # Feign的请求处理超时时间,默认为60秒
        readTimeout: 5000
        # 日志级别
        loggerLevel: full
        # 错误解码器
        errorDecoder: com.example.SimpleErrorDecoder
        # 重试策略
        retryer: com.example.SimpleRetryer
        # 拦截器配置(和@Bean的方式二选一)
        requestInterceptors:
          - com.example.FooRequestInterceptor
          - com.example.BarRequestInterceptor
        # 是否对404错误码解码
        # 处理逻辑详见feign.SynchronousMethodHandler#executeAndDecode
        decode404: false
        # 编码器
        encoder: com.example.SimpleEncoder
        # 解码器
        decoder: com.example.SimpleDecoder
        # 契约
        contract: com.example.SimpleContract

注意config下的default。

3.3、针对某个服务

feign:
  hystrix:
    # Feign启用断路器,默认为FALSE
    enabled: true
  client:
    config:
      # 针对某个服务
      ceam-wx:
        # Feign的连接建立超时时间,默认为10秒
        connectTimeout: 5000
        # Feign的请求处理超时时间,默认为60秒
        readTimeout: 5000
        # 日志级别
        loggerLevel: full
        # 错误解码器
        errorDecoder: com.example.SimpleErrorDecoder
        # 重试策略
        retryer: com.example.SimpleRetryer
        # 拦截器配置(和@Bean的方式二选一)
        requestInterceptors:
          - com.example.FooRequestInterceptor
          - com.example.BarRequestInterceptor
        # 是否对404错误码解码
        # 处理逻辑详见feign.SynchronousMethodHandler#executeAndDecode
        decode404: false
        # 编码器
        encoder: com.example.SimpleEncoder
        # 解码器
        decoder: com.example.SimpleDecoder
        # 契约
        contract: com.example.SimpleContract

注意config下的ceam-wx(服务名)。

到此这篇关于SpringCloud OpenFeign与Ribbon客户端配置详解的文章就介绍到这了,更多相关SpringCloud OpenFeign与Ribbon内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringCloud OpenFeign 服务调用传递 token的场景分析

    目录 业务场景 RequestInterceptor 多线程环境下传递 header(一) 分析 inheritableRequestAttributesHolder 原理 分析 inheritableRequestAttributesHolder 失效原因 多线程环境下传递 header(二) 控制主线程在子线程结束后再结束 重新保存 request 的 header 结语 业务场景 通常微服务对于用户认证信息解析有两种方案 在 gateway 就解析用户的 token 然后路由的时候把 us

  • springcloud 整合 openfeign的方法

    目录 一.openfeign简介 二.使用 1.依赖 2.配置文件 3.启动类 4.接口 5.controller 一.openfeign简介 Feign是Nefix开发的声明式.模块化的Http客户端.Feign可以帮助我们更快捷.优雅地调用Http Api. 在springclouid中使用 feign非常简单  --创建一个接口,并在接口中添加一些注解,代码就完成了,Feign支持多种注解 openFeign 是springcloud对Feign进行了增强,使得Feign支持了spring

  • SpringCloud openfeign声明式服务调用实现方法介绍

    目录 一.介绍 二.使用 三.通讯优化 一.介绍 OpenFeign是一种声明式.模板化的HTTP客户端(仅在Application Client中使用)(称OpenFeign作用:声明式服务调用).声明式调用是指,就像调用本地方法一样调用远程方法,无需感知操作远程http请求.OpenFeign替换RestTemplate. 二.使用 (1)导入依赖 <parent> <groupId>org.springframework.boot</groupId> <ar

  • SpringCloud OpenFeign超详细讲解模板化远程通信的实现

    目录 1. openFeign实现 1.1 pom依赖 1.2 yaml配置 1.3 客户端调用代码 1.4.服务端暴露接口 1.5.测试日志 1. openFeign实现 基于spring-boot-starter-parent 2.6.8,spring-cloud-dependencies 2021.0.3,一个order服务一个user服务 1.1 pom依赖 <!--nacos服务注册与发现--> <dependency> <groupId>com.alibab

  • SpringCloud学习笔记之OpenFeign进行服务调用

    目录 前言 1.OpenFeign 1.1.OpenFeign概述 1.2.OpenFeign的使用步骤 1.3.超时控制 1.3.1.是什么? 1.3.2.修改代码设置超时错误 1.3.3.进行超时配置 1.4.日志打印 1.4.1.是什么? 1.4.2.日志级别 1.4.3.如何开启日志打印 总结 前言 Feign是一个声明式的Web服务客户端,是面向接口编程的.也就是说使用Feign,只需要创建一个接口并使用注解方式配置它,就可以完成对微服务提供方的接口绑定. 在使用RestTemplat

  • SpringCloud Ribbon与OpenFeign详解如何实现服务调用

    目录 Ribbon 初识Ribbon Ribbon是什么 Ribbon能干什么 使用Ribbon实现负载均衡 RestTemplate三步走 负载均衡算法 轮询算法 OpenFeign 初识OpenFeign 什么是OpenFeign 如何使用OpenFeign OpenFeign超时控制 OpenFeign日志打印 Ribbon 初识Ribbon Ribbon是什么   Ribbon是Netflix发布的开源项目,主要功能是提供对客户端进行负载均衡算法的一套工具,将Netflix的中间层服务连

  • SpringCloud OpenFeign与Ribbon客户端配置详解

    目录 一.前言 二.OpenFeign与Ribbon配置 1.OpenFeign默认处理请求超时时间 1.1.模拟处理请求0.5秒 1.2.模拟处理请求1秒 2.Ribbon配置 2.1.配置请求处理超时5秒 2.2.模拟请求处理5秒 3.OpenFeign配置 3.1.配置请求处理超时6秒 3.2.OpenFeign配置对全部服务有效 3.3.针对某个服务 一.前言 OpenFeign为微服务架构下服务之间的调用提供了解决方案,OpenFeign是一种声明式.模板化的HTTP客户端.在Spri

  • SpringCloud 中使用 Ribbon的方法详解

    在前两章已经给大家讲解了Ribbon负载均衡的规则 以及 如何搭建Ribbon并调用服务,那么在这一章呢 将会给大家说一说如何在SpringCloud中去使用Ribbon.在搭建之前 我们需要做一些准备工作. 1. 搭建Eureka服务器:springCloud-ribbon-server(项目名称) 2. 服务提供者:springCloud-ribbon-police(项目名称) 3. 服务调用者:springCloud-ribbon-person(项目名称) 搭建Eureka服务器 配置 p

  • springcloud微服务之Eureka配置详解

    Eureka注册中心/服务发现框架 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的.SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能. Eureka包含两个组件:Eureka Server和Eureka Client. Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Serve

  • vue3+electron12+dll开发客户端配置详解

    当前使用的版本为 @vue/cli4 创建的 vue3.0 + typescript + electron 12 版本创建,其他版本暂未测试.网上资料良莠不齐,因此花费时间依次试验,达到一个目前最优解. 修改仓库源 由于electron版本的未知性,可能存在serve可用而build之后打开白屏的情况,因此需要谨慎对待.最好在版本可用的情况下commit一个版本,方便代码回滚,如果谁有更好的资料希望共享. 在开始配置前,可以将yarn和npm的rc文件稍作修改,使用命令或者文件直接修改.npmr

  • SpringCloud Bus组件的使用配置详解

    目录 什么是Bus 搭建RabbitMQ服务 实现自动配置刷新 指定服务刷新配置 集成webhook实现自动刷新 什么是Bus 0.解释 https://spring.io/projects/spring-cloud-bus springcloudbus使用轻量级消息代理将分布式系统的节点连接起来.然后,可以使用它来广播状态更改(例如配置更改)或其他管理指令.AMQP和Kafka broker实现包含在项目中.或者,在类路径上找到的任何springcloudstream绑定器都可以作为传输使用.

  • SpringCloud Feign高级配置详解

    目录 1.Feign对负载均衡的支持 2.Feign对熔断器的支持 3.Feign对请求压缩和响应压缩的支持 4.Feign的日志级别配置 1.Feign对负载均衡的支持 Feign 本身已经集成了Ribbon依赖和自动配置,因此我们不需要额外引入依赖,可以通过 ribbon.xx 来进行全局配置,也可以通过服务名.ribbon.xx 来对指定服务进行细节配置配置(参考之前,此处略) Feign默认的请求处理超时时长1s,有时候我们的业务确实执行的需要一定时间,那么这个时候,我们就需要调整请求处

  • Spring Cloud Ribbon配置详解

    本节我们主要介绍 Ribbon 的一些常用配置和配置 Ribbon 的两种方式. 常用配置 1. 禁用 Eureka 当我们在 RestTemplate 上添加 @LoadBalanced 注解后,就可以用服务名称来调用接口了,当有多个服务的时候,还能做负载均衡. 这是因为 Eureka 中的服务信息已经被拉取到了客户端本地,如果我们不想和 Eureka 集成,可以通过下面的配置方法将其禁用. # 禁用 Eureka ribbon.eureka.enabled=false 当我们禁用了 Eure

  • SpringCloud Gateway动态路由配置详解

    目录 路由 动态 路由模型实体类 动态路径配置 路由模型JSON数据 路由 gateway最主要的作用是,提供统一的入口,路由,鉴权,限流,熔断:这里的路由就是请求的转发,根据设定好的某些条件,比如断言,进行转发. 动态 动态的目的是让程序更加可以在运行的过程中兼容更多的业务场景. 涉及到两个服务,一个是门户服务(作用是提供给运营人员管理入口--包括:管理路由.绑定路由),一个是网关服务(gateway组件,为门户服务提供:查询路由信息.添加路由.删除路由.编辑路由接口). 路由模型实体类 /*

  • SpringCloud注册中心部署Eureka流程详解

    目录 1.Eureka服务 2.服务提供者 3.服务消费者 4.服务调用测试 今天我们开始正式编码,如何创建spring boot项目这篇文章就不再讲述,如果想要了解可以阅读我之前的创建springboot项目. 首先我们先进行Spring cloud五大组件之一的注册中心,之前文章已经讲过注册中心的介绍,今天我们来部署Netflix的Eureka,进行单机部署以及高可用部署,并开发生产者以及消费者来进行测试eureka的注册消费.(ps:系列文章使用的Spring cloud版本为2021.0

  • RSync实现文件同步备份配置详解

    一.什么是rsync rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限.时间.软硬链接等附加信息. rsync是用 "rsync 算法"提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另外它还是免费的软件. rsync 包括如下的一些特性: 能更新整个目录和树和文件系统: 有选择性的保持符号链链.硬链接.文件属于.权限.设备以及时间等:

随机推荐