Spring Cloud OpenFeign:基于Ribbon和Hystrix的声明式服务调用

💗wei_shuo的个人主页
💫wei_shuo的学习社区
🌐Hello World !
Spring Cloud OpenFeign:基于Ribbon和Hystrix的声明式服务调用
Spring Cloud OpenFeign是一个声明式的服务调用框架,基于Feign并整合了Ribbon和Hystrix;目标是简化分布式系统中编写服务间调用的代码,并提供一种更加优雅和便捷的方式来进行服务之间的通信
创建feign-service模块
- 依赖导入
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix -eureka-client</artifactId> </dependency> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency>
- application.yml配置
server:port: 8701 spring:application:name: feign-service eureka:client:register-with-eureka: truefetch-registry: trueservice-url:defaultZone: http://localhost:8001/eureka/
- 启动类上添加@EnableFeignClients注解来启用Feign的客户端功能
@EnableFeignClients @EnableDiscoveryClient @SpringBootApplication public class FeignServiceApplication {public static void main(String[] args) {SpringApplication.run(FeignServiceApplication.class, args);} }
- 添加UserService接口完成对user-service服务的接口绑定
@FeignClient(value = "user-service") public interface UserService {@PostMapping("/user/create")CommonResult create(@RequestBody User user);@GetMapping("/user/{id}")CommonResult<User> getUser(@PathVariable Long id); }
- 添加UserFeignController调用UserService实现服务调用
@RestController @RequestMapping("/user") public class UserFeignController {@Autowiredprivate UserService userService;@PostMapping("/create")public CommonResult create(@RequestBody User user) {return userService.create(user);}@GetMapping("/{id}")public CommonResult getUser(@PathVariable Long id) {return userService.getUser(id);} }
Feign中的服务降级
微服务架构中,服务降级是一种应对高并发或系统故障的策略,用于保证系统的可用性和稳定性;Feign是一个声明式的Web服务客户端,可以与Spring Cloud等微服务框架集成,简化服务之间的调用
- 添加服务降级实现类UserFallbackService
@Component public class UserFallbackService implements UserService {@Overridepublic CommonResult create(User user) {User defaultUser = new User(-1L, "defaultUser", "123456");return new CommonResult<>(defaultUser);}@Overridepublic CommonResult<User> getUser(Long id) {User defaultUser = new User(-1L, "defaultUser", "123456");return new CommonResult<>(defaultUser);}@Overridepublic CommonResult<User> getByUsername(String username) {User defaultUser = new User(-1L, "defaultUser", "123456");return new CommonResult<>(defaultUser);}@Overridepublic CommonResult update(User user) {return new CommonResult("调用失败,服务被降级",500);}@Overridepublic CommonResult delete(Long id) {return new CommonResult("调用失败,服务被降级",500);} }
- 修改UserService接口,设置服务降级处理类为UserFallbackService
@FeignClient(value = "user-service",fallback = UserFallbackService.class) public interface UserService { }
- 修改application.yml,开启Hystrix功能
feign:hystrix:enabled: true #在Feign中开启Hystrix
日志打印功能
Feign提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解Feign中Http请求的细节
日志级别
- NONE:默认的,不显示任何日志
- BASIC:仅记录请求方法、URL、响应状态码及执行时间
- HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息
- FULL:除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据
通过配置开启更为详细的日志
- 通过java配置来使Feign打印最详细的Http请求日志信息
@Configuration public class FeignConfig {@BeanLogger.Level feignLoggerLevel() {return Logger.Level.FULL;} }
- application.yml中配置需要开启日志的Feign客户端;配置UserService的日志级别为debug
logging:level:com.macro.cloud.service.UserService: debug
Feign的常用配置
feign:hystrix:enabled: true #在Feign中开启Hystrixcompression:request:enabled: false #是否对请求进行GZIP压缩mime-types: text/xml,application/xml,application/json #指定压缩的请求数据类型min-request-size: 2048 #超过该大小的请求会被压缩response:enabled: false #是否对响应进行GZIP压缩
logging:level: #修改日志级别com.macro.cloud.service.UserService: debug
🌼 结语:创作不易,如果觉得博主的文章赏心悦目,还请——
点赞👍收藏⭐️评论📝

相关文章:
Spring Cloud OpenFeign:基于Ribbon和Hystrix的声明式服务调用
💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Spring Cloud OpenFeign:基于Ribbon和Hystrix的声明式服务调用 Spring Cloud OpenFeign是一个声明式的服务调用框架,基于Feign并整合了Ribbon和…...
租用服务器带宽类型应用
服务器带宽类型多样,以满足不同行业的需求。本文将介绍香港常见的服务器带宽类型及其应用领域。 1. 共享带宽 共享带宽是指多个用户共同使用同一台服务器的带宽资源。这种带宽类型适用于小型企业或个人网站,因为其成本较低。由于多个用户共享带宽资源&…...
SOLIDWORKS实用技巧之焊件轮廓应用
1.焊件轮廓库官方下载入口 焊件轮廓可以自制,也可以从软件中在线下载获取直接使用,如图1,联网状态按ctrl左键点击下载,解压后获得库文件。 图1 图2 2.库放置的位置和配置 从SOLIDWORKS2014版起,软件焊件轮廓库支持可…...
本地浏览器全局翻译 demo 以火狐firefox为例【免费-简单】
translateDemo 介绍使用说明简单到流泪 本地浏览器全局翻译 demo 以火狐firefox为例 1、安装插件 使用少量的 JavaScript 脚本,自由定义网页显示与运行方式。2、将上述脚本 追加到 插件中即可实现全局翻译;3、免费;参与贡献特技 translateDe…...
使用多线程处理List数据
最近遇到了一个业务场景,需要对List中的数据逐个发起http请求(List中的数据各自独立,对执行顺序无要求),考虑到可以使用多线程加快处理速度。 封装了如下方法: /// <summary>/// 多线程处理数据-无返回值/// </summary&…...
Elasticsearch--Python使用、Django/Flask集成
一、Python使用 from elasticsearch import Elasticsearchobj Elasticsearch() # 创建索引(Index) result obj.indices.create(indexuser, body{"userid":1,username:lqz},ignore400) # print(result) # 删除索引 # result obj.indices.de…...
pyspark将数据多次插入表的时候报错
代码 报错信息 py4j.protocol.Py4JJavaError: An error occurred while calling o129.sql. : org.apache.spark.sql.catalyst.parser.ParseException: mismatched input INSERT expecting <EOF>(line 12, pos 0) 原因 插入语句结束后没有加;结尾 把两个&am…...
Qt绘制饼状图
必须在MainWindow.h头文件开头放 #include <QtCharts> //必须这么设置 创建chart: void MainWindow::iniPiewChart() { //饼图初始化QChart *chart new QChart();chart->setTitle(" Piechart演示");chart->setAnimationOptions(QChar…...
Vue3 setup函数
一、setup函数介绍 setup函数是Vue3中全新的一个配置项,值为一个函数,是所有 Composition API 中“表演的舞台”。 我们在Vue2中用到的所有数据、方法,都需要配置在setup中。 这是我们在Vue2中的写法: 这是我们在Vue3 setup中的…...
Django(三、数据的增删改查、Django生命周期流程图)
文章目录 一、 基于ORM进行的CURDuser_list:作为主页使用路由文件urls.py配置如下:add.html:用于新增用户的数据页add页面视图函数如下:edit.html:修改数据的页面那么来总结一下上序所操作所用到的内容。 导入已存在的表其方式有两…...
Linux 部署Sentinel控制台
Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 1.版本选择 SpringCloudAlibaba SpringClo…...
服务器如何下载百度网盘数据
百度网盘作为镜像 国外用户传数据到我们服务器比较慢,但是传输百度网盘速度还是可以的。 这样我们就可以将百度网盘作为一个文件中转站。 但Linux系统下使用百度网盘有些麻烦,虽然百度网盘也有Linux版本,但服务器没开启图形界面,使用的是命令行。这个时候就得感谢开发者Ho…...
POJ 3254 Corn Fields 状态压缩DP(铺砖问题)
一、题目大意 我们要在N * M的田地里种植玉米,有如下限制条件: 1、对已经种植了玉米的位置,它的四个相邻位置都无法继续种植玉米。 2、题目中有说一些块无论如何,都无法种植玉米。 求所有种植玉米的方案数(不种植也…...
transformers安装避坑
1.4 下载rust编辑器 看到这里你肯定会疑惑了,我们不是要用python的吗? 这个我也不知道,你下了就对了,不然后面的transformers无法安装 因为是windows到官网选择推荐的下载方式https://www.rust-lang.org/tools/install。 执行文…...
牛客、赛码网OJ调试(全)
现在无论开发还是测试,面试的时候都需要考察代码能力。 从测试的职业发展来看,现在市场上对于纯功能测试的需求很少,招聘方均要求面试者一方面具备测试基础能力,也要求有点代码能力。 对于测试来说,除了测试开发&#…...
【CSS】全局声明引入自定义字体
以下用vue项目为例,其他的也是类似! 在Vue.js中可以使用全局样式表来定义字体。通常,可以在项目中的主样式表中定义全局字体,然后确保该样式表在整个应用程序中被引入。 以下是一般的步骤: 在项目中创建一个全局样式…...
「Flask」路由+视图函数
路由 路由的作用是将 HTTP 请求的 URL 路径映射到相应的函数处理程序。这样我们在开发过程中,就能将不同的 URL 路径与相应的函数处理程序关联起来,从而实现对 Web 应用的灵活控制。 路由可以分为静态路由和动态路由。两者主要是在形式上有一些区别&am…...
信息系统项目管理师 教材目录、考试大纲、考情
文章目录 考情考试大纲第1章 信息化发展第2章 信息技术发展第3章 信息系统治理第4章 信息系统管理第5章 信息系统工程第6章 项目管理概论第7章 项目立项管理第8章 项目整合管理第9章 项目范围管理272第10章 项目进度管理297第11章 项目成本管理334第12章 项目质量管理358第13章…...
python线性回归实现
import random import torch# ①根据带有噪声的线性模型构造一个人造数据集。 使用线性模型参数w[2,−3.4] b4.2和噪声项ϵ生成数据集及其标签 def synthetic_data(w, b, num_examples):"""生成 y Xw b 噪声。"""# 生成均值为0,标…...
【JavaEESpring】认识Spring
认识Spring 1. 什么是框架2. SpringBoot 介绍2.1 Spring 的介绍2.2 SpringBoot 1. 什么是框架 框架(Framework) ,意思是框架、机制、准则。通俗的来讲: 框架是实现某种功能的半成品, 他提供了⼀些常⽤的⼯具类, 我们在框架的基础上, 可以更加⾼效的进⾏开发 后端框…...
坐标系工艺参数的设定
在一台专机机床上模拟圆弧程序时,发现G2和G3的方向是反的,G2轴按逆时针方向运行,G3轴按顺时针方向运行。测试程序如下:G19G0 G90 Y0 Z0G2 Y100 Z100 CR100 F500M30G2指令时,圆弧为逆时针方向G3指令时,圆弧为…...
嵌入式NTP客户端:一次校准,离线维持49天高精度时间
1. 项目概述PREi NTP Manager 是一个专为嵌入式平台(尤其是 ESP 系列微控制器)设计的轻量级网络时间协议(NTP)客户端库。其核心目标并非实现完整的 RFC 5905 NTP 协议栈,而是以极简、可靠、低资源占用的方式࿰…...
避坑指南:天地图加载GeoJSON绘制省市区划时,你可能遇到的3个关键问题与解决方案
天地图加载GeoJSON绘制行政区划的三大核心难题与实战解决方案 当开发者尝试在天地图平台上叠加GeoJSON数据绘制行政区划时,往往会遇到一些意料之外的"坑"。这些问题不仅影响开发效率,更可能导致最终呈现效果与预期相差甚远。本文将聚焦三个最常…...
三菱R系列PLC应用案例:远程操作与通信,涉及高端触摸屏、机器人连接及EPLAN电气设计
三菱R系列PLC案例程序 三菱R系列ST、RD77MS定位以及三菱触摸屏配方功能,此案例还提供两个触摸屏实现异地操作,使操作更加方便快捷。 此案例还通过CClink远程连接远程IO站以及机器人,将机器人作为远程设备站,实现跟机器人的快速通信…...
CANoe CAPL文件读写保姆级教程:从记录测试数据到读取配置文件
CANoe CAPL文件读写实战指南:从数据记录到动态配置 在汽车电子测试领域,数据记录和参数配置的自动化程度直接影响着测试效率和可靠性。想象这样一个场景:凌晨三点的耐久性测试实验室,测试工程师需要每隔15分钟手动记录一次总线报文…...
MindSpore 环境配置完全指南呕
前面我们对 Kafka 的整体架构和一些关键的概念有了一个基本的认知,本文主要介绍 Kafka 的一些配置参数。掌握这些参数的作用对我们的运维和调优工作还是非常有帮助的。 写在前面 Kafka 作为一个成熟的事件流平台,有非常多的配置参数。详细的参数列表可以…...
光伏电站全流程软件产品核心功能解析
随着光伏产业规模化发展,电站管理已进入全流程数字化管控时代,一款优质的光伏电站全流程软件,需覆盖项目开发、施工建设、智能运维、数据决策全链路,精准破解各环节痛点,为电站高效运营提供技术支撑。结合行业实践&…...
汽车变速箱企业Kisssoft许可证成本控制成功案例
汽车变速箱企业Kisssoft许可证成本控制成功案例讲真,用Kisssoft做仿真设计,许可证成本真是吃掉不少预算,是一大推企业并尚未真正掌握咋用好这伙许可证一出来,弄得浪费严重,合规风险也高。咱就在2026年帮助一家汽车变速…...
从一道CTF题看企业级K8s集群的常见安全风险与取证要点
从一道CTF题看企业级K8s集群的常见安全风险与取证要点 在云原生技术快速普及的今天,Kubernetes(K8s)已成为企业容器编排的事实标准。然而,随着K8s集群规模的扩大,其安全风险也日益凸显。本文将通过解析一道典型的CTF赛…...
别再让毛刺坑了你!手把手教你用Verilog在FPGA上实现增量式编码器的精准滤波与计数
工业级增量式编码器信号处理:FPGA实战抗干扰与精准计数方案 在工业自动化现场,伺服电机控制系统对位置检测精度的要求往往高达微米级。然而,电磁干扰、机械振动等环境因素常导致增量式编码器输出信号出现毛刺,这些看似微小的噪声可…...
