【微服务】SpringCloud的OpenFeign与Ribbon配置

news2025/1/17 0:57:30

💖 Spring家族及微服务系列文章

✨【微服务】SpringCloud轮询拉取注册表及服务发现源码解析

✨ 【微服务】SpringCloud微服务续约源码解析

✨【微服务】SpringCloud微服务注册源码解析

✨【微服务】Nacos2.x服务发现?RPC调用?重试机制?

✨【微服务】Nacos通知客户端服务变更以及重试机制

✨【微服务】Nacos服务发现源码分析

✨【微服务】SpringBoot监听器机制以及在Nacos中的应用

✨【微服务】Nacos服务端完成微服务注册以及健康检查流程

✨【微服务】Nacos客户端微服务注册原理流程

✨【微服务】SpringCloud中使用Ribbon实现负载均衡的原理

✨【微服务】SpringBoot启动流程注册FeignClient

✨【微服务】SpringBoot启动流程初始化OpenFeign的入口

✨Spring Bean的生命周期

✨Spring事务原理

✨SpringBoot自动装配原理机制及过程

✨SpringBoot获取处理器流程

✨SpringBoot中处理器映射关系注册流程

✨Spring5.x中Bean初始化流程

✨Spring中Bean定义的注册流程

✨Spring的处理器映射器与适配器的架构设计

✨SpringMVC执行流程图解及源码

目录

💖 Spring家族及微服务系列文章

一、前言

二、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、针对某个服务

💖SpringCloud Alibaba实战搭建系列:


一、前言

    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秒

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

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

可见虽然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 Alibaba实战搭建系列:

✨《SpringCloud Alibaba微服务第1章》

✨《SpringCloud Alibaba微服务第2章之Nacos》

✨《SpringCloud Alibaba微服务第3章之Nacos》

✨《SpringCloud Alibaba微服务第4章之Nacos》

✨《SpringCloud Alibaba微服务第5章之Gateway》

✨《SpringCloud Alibaba微服务第6章之Gateway》

✨《Spring Cloud Alibaba微服务第7章之负载均衡Ribbon》

✨《Spring Cloud Alibaba微服务第8章之OpenFeign》

✨《Spring Cloud Alibaba微服务第9章之MyBatis-plus》

✨《Spring Cloud Alibaba微服务第10章之MyBatis-plus》

✨《Spring Cloud Alibaba微服务第11章之MyBatis-plus》

✨《Spring Cloud Alibaba微服务第13章之分库分表》

✨《Spring Cloud Alibaba微服务第14章之分库分表》

✨《Spring Cloud Alibaba微服务第15章之服务容错》

✨《Spring Cloud Alibaba微服务第16章之服务容错》

✨《Spring Cloud Alibaba微服务第17章之消息服务》

✨《Spring Cloud Alibaba微服务第18章之消息服务》

✨《Spring Cloud Alibaba微服务第19章之分布式事务》

✨《Spring Cloud Alibaba微服务第20章之分布式事务》

✨《Spring Cloud Alibaba微服务第21章之分布式事务》

✨《Spring Cloud Alibaba微服务第22章之Oauth2》

✨《Spring Cloud Alibaba微服务第23章之Oauth2授权码模式》

✨《Spring Cloud Alibaba微服务第24章之Docker部署》

✨《Spring Cloud Alibaba微服务第25章之Jenkins》

✨《Spring Cloud Alibaba微服务第26章之Jenkins》

✨《Spring Cloud Alibaba微服务第27章之Jenkins》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/23930.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

token的使用

一:什么是token及token的作用? 1.什么是token? Token是首次登录时,由服务器下发,作为客户端进行请求时的一个令牌。当请求后台方法时,用于身份验证 当第一次登录后,服务器生成一个Token便将此…

1013 Battle Over Cities

目录 Input Specification: Output Specification: Sample Input: Sample Output: 一、题目大意 二、思路 三、代码 It is vitally important to have all the cities connected by highways in a war. If a city is occupied by the enemy, all the highways from/to…

138.深度学习分布式计算框架-1

138.1 PaddlePaddle PaddlePaddle是百度开源的一个深度学习平台PaddlePaddle为深度学习研究人员提供了丰富的API,可以轻松地完成神经网络配置,模型训练等任务。官方文档中简易介绍了如何使用框架在 线性回归识别数字图像分类词向量个性化推荐情感分析语…

2.14 分享9个高吸睛小红书首图制作技巧,要认真学哦!【玩赚小红书】

在小红书里,推荐的图片比例是3:4、1:1、4:3。 做图的时候就要提前调整好比例,免得上传被自动裁剪掉重要信息。竖屏最常用,因为比较“霸屏”,展现的信息空间比较大。当然,选哪个比例还是看个人偏好,尽量保持…

2022年C++面试题万余字汇总【面试官常问】

2022年C面试题【常问重点问题】1、请你说说 GET 和 POST 的区别?2、简述一下 C 中的多态?3、说一说进程有多少种状态,如何转换?3、请你说说指针和引用的区别4、简述一下虚函数的实现原理5、说一说 vector 和 list 的区别,分别适用于什么场景…

剪映PC版英文字幕翻译最新方法(中英互译)

原文地址 剪映PC版英文字幕翻译最新方法(中英互译) – 方包博客 – java|python|前端开发|运维|电商|ui设计剪映PC版英文字幕翻译最新方法(中英互译)https://www.fang1688.cn/ziyuan/3431.html 我的是剪映 v3.3.0版本。旧版不支持…

Omorn - NJ301-1100 AND NX102-9000 - CIP - UCMM 通讯

目录 Omorn - NJ301-1100 AND NX102-9000 - CIP - UCMM 通讯 测试案例IP 创建变量类型 指令编写加数据测试 Omorn - NJ301-1100 AND NX102-9000 - CIP - CLASS3 通讯 Omorn - NJ301-1100 AND NX102-9000 - CIP - UCMM 通讯 说明: 1、NJ的网络通讯指令要有CIP…

【C语言入门数据结构】顺序表

🙈个人主页:阿伟t 👉系列专栏:【C语言–大佬之路】 🎈今日心语:你所看到的惊艳,都曾被平庸所历练。 前言:继【时间复杂度和空间复杂】度之后,本章我们来介绍数据结构中…

docker能干什么以及基本名词解释

docker能干什么以及基本名词解释 docker能干什么?比较docker和虚拟机的不同DEVOps (开发,运维)基本名词解释docker能干什么? 比较docker和虚拟机的不同 传统虚拟机,虚拟出一条硬盘,然后再这个系统上安装和运行软件。…

1.3-1.7 测度理论

测度理论 (Durrett) 第五版 个人笔记 答案 Durrett高等概率论教材 (Probability) 攻读概率及统计/机器学习应用方向博士学位. 1. Measure Theory Probability SpacesDistributionsRandom VariablesIntegrationProperties of the IntegralExpected ValueProduct Measures, Fub…

python实现科研通定时自动签到

1 新建虚拟环境 python -m venv venv2 激活环境 3 官网下载edgedriver.exe Edge WebDriver链接在此,下载对应的浏览器的版本,然后改名为msedgedriver.exe放在\venv\Scripts下面。 main.py代码如下: from selenium import webdriver from…

动态规划——完全背包问题(C++实现)

题目描述: 问题分析: 完全背包问题和01背包问题的不同点: 简单01背包中是从N个物品里选,每个物品只能用1次,完全背包则不同,每个物品可以用无限次。 01背包: 如果物品能放入背包&#xff08…

PIC单片机1——按钮测试

#include "p18f458.h" #define Button PORTBbits.RB0 #define Led PORTCbits.RC0 void delay() { unsigned char i,j; for(i0;i<255;i) for(j0;j<255;j) ; } void main() { TRISBbits.TRISB01;//B0输入 TRISCbits.TRISC00;//C0输出 Led1;…

[计算机毕业设计]大数据疫情分析与可视化系统

前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着准备考研,考公,考教资或者实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过…

Unload data from Databend | 新手篇(4)

上篇我们讲了怎么利用 copy 命令借助于 Stage 把数据加载到 Databend 中&#xff0c;Databend 致力于构建一个完整的数据湖&#xff0c;也需要支持用户把数据从 Databend 中取走&#xff0c;这里 Databend 给三种可以把数据取走的办法&#xff1a; External table 把数据存储在…

fiddler使用教程

Fiddler教程 Fiddler简介 Fiddler是一款网络代理调试工具&#xff0c;可以将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作&#xff0c;是目前最常用的http抓包工具之一。 Fiddler工作原理 Fiddler通过改写HTTP代理&#xff0c;来监控并截取数据。当浏览器访…

2022年第十二届APMCM亚太地区大学生数学建模竞赛--思路代码

2022年第十二届APMCM亚太地区大学生数学建模竞赛--思路&代码报名时间节点往年真题赛题&翻译题目思路A题——赛题解读&解题思路B 题——赛题解读&解题思路C题——赛题解读&解题思路报名 官方网址&#xff1a;http://www.apmcm.org 报名网址&#xff1a;http…

Similarity and Matching of Neural Network Representations 论文阅读笔记

这是NIPS2021的一篇论文&#xff0c;文章主要是探究了通过一个stiching layer将两个已训练的不同初始化的相同结构的网络的某一层进行匹配的可能性。 前言 作者对 “什么情况下两个表征是相似的&#xff1f;” 提出了一个新的问题&#xff1a;“如果我们知道两个表征是相似的&…

Qt 停靠布局QDockWidget使用

基本使用 QDockWidget是一个可以停靠在QMainWindow内的窗口控件&#xff0c;它可以保持浮动状态或在指定位置作为子窗口附加到主窗口中。停靠窗口QDockWidget类是应用程序中经常用到的&#xff0c;设置停靠窗口的一般流程如下。 创建一个QDockWidget对象的停靠窗体。设置此停…

Kafka是什么?Rocket MQ在Spring Boot中怎么整合使用/Kafka在SpringBoot中简单配置使用

写在前面&#xff1a; 继续记录自己的SpringBoot学习之旅&#xff0c;这次是SpringBoot应用相关知识学习记录。若看不懂则建议先看前几篇博客&#xff0c;详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用&#xff01; 3.5.4.5 SpringBoot整合RocketMQ 3.5.4.5.1 Rocket…