Sentinel 与 OpenFeign 断路器:Hystrix 已过时,Sentinel 强势崛起

简介

随着微服务架构的流行,服务之间的通信变得日益频繁。为了保证系统的稳定性和可靠性,在服务之间的通信中使用断路器是至关重要的。本文将介绍 OpenFeign 与 Sentinel 结合使用的方法,强调 Hystrix 已经过时,并展示 Sentinel 的强大之处。

1. Hystrix 的退场

Hystrix 曾是微服务领域中最流行的断路器实现之一,但随着其维护停滞和社区活跃度下降,Hystrix 已经宣布停止维护。这导致了很多开发者开始寻找替代方案,而 Sentinel 就是其中的佼佼者。

2. Sentinel 的介绍

Sentinel 是阿里巴巴开源的一款高可用性的流量控制、熔断降级解决方案。它提供了实时的流量监控、熔断降级、系统负载保护等功能,可以帮助开发者保护系统免受不稳定的外部服务的影响。

3. OpenFeign 与 Sentinel 结合

OpenFeign 是一个声明式的 HTTP 客户端,可以轻松地与 Sentinel 集成,从而实现对服务调用的流量控制和熔断降级。下面是集成的方法:

3.1 添加依赖

在项目的 pom.xml 文件中添加 Sentinel、Nacos 和 OpenFeign 的相关依赖,确保版本兼容性。

<!-- Sentinel -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency><!-- Nacos -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency><!-- OpenFeign -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency><!-- loadbalancer-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

3.2 配置 Sentinel 和 Nacos

这段配置是针对使用 Feign 和 Sentinel 进行服务调用时的相关设置。

  • feign.circuitbreaker.enabled: true: 这个配置项启用了 Feign 的断路器功能。Feign 通过集成断路器来处理对其他服务的调用,当远程服务不可用或出现故障时,断路器会打开,防止请求继续发送到不可用的服务上,从而保护系统的稳定性。【注意】为啥开启了sentinel还需要单独开启circuitbreaker,有时候会抽风,feign.circuitbreaker.enabled: true为了更靠谱点

  • feign.sentinel.enabled: true: 这个配置项启用了 Feign 与 Sentinel 的集成功能。

在配置文件中添加 Sentinel 和 Nacos 的配置,例如:

feign:client:config:metaDataClient:connect-timeout: 5000read-timeout: 10000default-to-properties: truecircuitbreaker:enabled: truesentinel:enabled: truespring:cloud:nacos:discovery:server-addr: localhost:8848  # Nacos 注册中心的地址username: nacospassword: nacos

3.3 创建 Feign 客户端

创建一个接口,使用 @FeignClient 注解来声明一个 Feign 客户端,示例如下:

@FeignClient(name = "service-provider", fallbackFactory = EchoServiceFallbackFactory.class)
public interface EchoService {@GetMapping(value = "/echo")String echo();
}

3.4 创建 Sentinel FallbackFactory

创建一个 FallbackFactory 类,用于对 Sentinel 断路器的回退处理,示例如下:

@Component
public class EchoServiceFallbackFactory implements FallbackFactory<EchoService> {@Overridepublic EchoService create(Throwable cause) {return new EchoService() {@Overridepublic String echo() {System.out.println("Circuit breaker triggered!");return "Circuit breaker triggered!";}};}
}

4. 启用 Nacos 注册中心

在 Spring Boot 应用的启动类上添加 @EnableDiscoveryClient 注解,以启用 Nacos 注册中心的服务注册和发现功能。

@SpringBootApplication
@EnableDiscoveryClient
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

最后Resilience4j 是一个备受推崇的工具。它提供了一套弹性组件,用于处理分布式系统中的故障和延迟,帮助开发者构建具有高可用性和可靠性的应用程序。

5. Resilience4j 简介

Resilience4j 是一个轻量级的容错库,由 Java 8+ 编写,旨在帮助开发者构建弹性和鲁棒性的分布式系统。它提供了诸如断路器、限流、重试等功能,通过这些功能,可以有效地保护应用程序免受外部服务的故障和不稳定性的影响。

6. Resilience4j 的核心组件

Resilience4j 提供了一系列核心组件,用于实现容错和弹性功能:

6.1 断路器(Circuit Breaker)

断路器是 Resilience4j 最为重要的组件之一,它可以监控对远程服务的调用,并在达到一定的失败阈值后打开,阻止对故障服务的调用,从而避免资源的浪费和系统的雪崩效应。

6.2 限流器(Rate Limiter)

限流器用于限制对远程服务的请求速率,防止系统因为过多的请求而被压垮。通过限制请求的速率,可以有效地保护系统免受过载的影响。

6.3 重试器(Retry)

重试器用于处理由于网络故障或服务不可用导致的请求失败。它可以根据预定义的策略和条件,自动地对失败的请求进行重试,提高系统的可靠性和稳定性。

6.4 超时器(Timeout)

超时器用于设置请求的最大执行时间,当请求执行时间超过设定的阈值时,超时器会自动取消请求并返回一个超时异常,避免长时间的等待导致系统资源的浪费。

7. Resilience4j 的优势

Resilience4j 具有以下几个显著的优势:

  • 轻量级: Resilience4j 是一个轻量级的库,不依赖于其他大型框架,可以很容易地集成到现有的项目中。
  • 响应式: Resilience4j 支持响应式编程,可以与 Reactor、RxJava 等响应式框架无缝集成,提供异步和非阻塞的容错解决方案。
  • 可组合性: Resilience4j 的组件是可以组合使用的,开发者可以根据实际需求灵活地选择和配置不同的组件,构建符合业务场景的弹性策略。

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

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

相关文章

Python和C++音调音符规划和算法

&#x1f3af;要点 &#x1f3af;音符表征和代码实现&#xff1a;&#x1f58a;半音位置和索引之间的转换 | &#x1f58a;全音阶音调表征 | &#x1f58a;全音阶缓存 | &#x1f58a;全音阶音高表征。&#x1f3af;音程表征和代码实现&#xff1a;&#x1f58a;音程质量 | &a…

Oracle导出导入dmp等文件类型的多表数据的常用方法、遇见的常见问题和解决办法(exp无效sql???)

使用PLSQL执行导出表数据的时候有两种方法 1、使用Oracle命令【imp--exp】【impdp--expdp】 但是如果你的本机没有安装有Oracle数据库&#xff0c;使用的instant client远程连接服务器上的Oracle数据库时候&#xff0c;你没有Oracle数据库带有的exp.exe、imp.exe等扩展文件&a…

有没有降低三维设计软件版权成本的方案?

企业是否都苦恼三维设计软件购买成本太高了&#xff1f;如投入商业使用&#xff0c;三维设计软件一般涉及正版的版权购买。但是&#xff0c;正版的版权购买费用较贵&#xff0c;且支持一台电脑使用。企业每年购买正版三维设计软件都需要很大一笔支出&#xff0c;随着企业不断发…

Android kotlin 协程异步async与await介绍与使用

一、介绍 在kotlin语言中&#xff0c;协程是一个处理耗时的操作&#xff0c;但是很多人都知道同步和异步&#xff0c;但是不知道该如何正确的使用&#xff0c;如果处理不好&#xff0c;看似异步&#xff0c;其实在runBloacking模块中使用的结果是同步的。 针对如何同步和如何异…

day04 51单片机-矩阵按键

1 矩阵按键 1.1 需求描述 本案例实现以下功能&#xff1a;按下矩阵按键SW5到SW20&#xff0c;数码管会显示对应的按键编号。 1.2 硬件设计 1.2.1 硬件原理图 1.2.2 矩阵按键原理 1.3软件设计 1&#xff09;Int_MatrixKeyboard.h 在项目的Int目录下创建Int_MatrixKeyboard…

Acer宏碁掠夺者战斧300笔记本电脑PH315-52工厂模式原装Win10系统安装包 恢复出厂开箱状态 带恢复重置

宏碁掠夺者PH315-52原厂Windows10工厂包镜像下载&#xff0c;预装oem系统 链接&#xff1a;https://pan.baidu.com/s/1grmJzz6nW1GOaImY_ymXGw?pwdi286 提取码&#xff1a;i286 原厂W10系统自带所有驱动、PredatorSense风扇键盘控制中心、Office办公软件、出厂主题壁纸、系统…

C语言简易类json格式解析

在使用MQTT时&#xff0c;获取的数据基本上都是json格式的&#xff0c;虽然C语言也可以添加第三方的解析库&#xff0c;但有些资源少的单片机用着还是挺吃力的&#xff0c;所以自己简单写了一个从json格式中获取数据的&#xff0c;说白了就是一个字符串查找。就比如下面这一段 …

Scrapy 爬虫教程:从原理到实战

Scrapy 爬虫教程&#xff1a;从原理到实战 一、Scrapy框架简介 Scrapy是一个由Python开发的高效网络爬虫框架&#xff0c;用于从网站上抓取数据并提取结构化信息。它采用异步IO处理请求&#xff0c;能够同时发送多个请求&#xff0c;极大地提高了爬虫效率。 二、Scrapy运行原…

如何使用PHP进行JSON编码和解码?

如何使用PHP进行JSON编码和解码&#xff1f; 使用PHP进行JSON编码和解码是开发过程中非常常见的任务。JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;它使得人们能够很容易地阅读和编写&#xff0c;同时也使得机器能够解析和…

阐述 Git 命令 reset 和 revert

1 概述 由于某次或某几次提交的代码污染了远程分支&#xff0c;需要对远程分支代码进行恢复操作&#xff0c;此时可以通过 git 的 reset 和 revert 命令进行恢复。 HEAD 是指向当前分支的最新提交的指针 &#xff0c;每一次提交代码都会产生一个 commit id 来标识工作区的变更…

Elasticsearch单机部署(Linux)

1. 准备环境 本文中Elasticsearch版本为7.12.0&#xff0c;JDK版本为1.8.0&#xff0c;Linux环境部署。 扩展&#xff1a; &#xff08;1&#xff09;查看Elasticsearch对应的常用的jdk版本如下&#xff1a;&#xff08;详情可看官网的支持一览表&#xff09; Elasticsearch a…

贪吃蛇项目实践!(下)

NextIsFood 比较蛇指向的节点和食物指向的节点是否相同 //pSnakeNode psn 是下⼀个节点的地址 //pSnake ps 维护蛇的指针 int NextIsFood(pSnakeNode psn, pSnake ps) {return (psn->x ps->_pFood->x) && (psn->y ps->_pFood->y); }EatFood //…

机器学习 -- 分类问题

场景 探讨了一个回归任务——预测住房价格&#xff0c;用到了线性回归、决策树以及随机森林等各种算法。本次中我们将把注意力转向分类系统。我们曾经对MNIST进行了分类任务&#xff0c;这次我们重新回到这里&#xff0c;细致的再来一次。 开始 获取数据 Scikit-Learn提供了…

ELK 日志分析系统(二)

一、ELK Kibana 部署 1.1 安装Kibana软件包 #上传软件包 kibana-5.5.1-x86_64.rpm 到/opt目录 cd /opt rpm -ivh kibana-5.5.1-x86_64.rpm 1.2 设置 Kibana 的主配置文件 vim /etc/kibana/kibana.yml --2--取消注释&#xff0c;Kiabana 服务的默认监听端口为5601 server.po…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-6

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

nodejs连接oracle批量更新数据测试

条件&#xff1a;oracle数据库,数据表20w。所有测试都在本机执行&#xff0c;保持相同的网络带宽。因为机器性能和更新速度问题&#xff0c;这里只测试更新1w数据。 方式1&#xff1a;nodejs代码程序块更新 const sql "declare i number: 0;begin" " while i …

为什么分类问题不能使用mse损失函数,更容易理解版本

分类问题通常不适合使用均方误差&#xff08;Mean Squared Error&#xff0c;MSE&#xff09;损失函数&#xff0c;原因如下&#xff1a; 1.输出差异&#xff1a; 输出差异的度量不同&#xff1a;MSE损失函数是基于预测值和真实值之间的差异的平方和进行计算的&#xff0c;适…

一分钟教你学浪视频怎么存到网盘里面#小浪助手

只需要将学浪视频下载下来,然后利用网盘的上传功能,就能将学浪视频存到网盘里面 那么怎么下载学浪视频呢?其实这里可以借助一个工具:小浪助手 小浪助手我已经打包好了,有需要的自己取一下 学浪下载器链接&#xff1a;https://pan.baidu.com/s/1nyjXc88BWbF8jnfQWUGLZQ?pwd…

Python爱心代码

爱心效果图&#xff1a; 完整代码&#xff1a; import random from math import sin, cos, pi, log from tkinter import *# 定义画布尺寸和颜色 CANVAS_WIDTH 640 CANVAS_HEIGHT 480 CANVAS_CENTER_X CANVAS_WIDTH / 2 CANVAS_CENTER_Y CANVAS_HEIGHT / 2 IMAGE_ENLARG…

Pandabuy代采模式独立站打造攻略,轻松开启全球电商新篇章!

Pandabuy是一个知名的代采平台&#xff0c;老外想要购买1688的物美价廉的商品&#xff0c;但是受限于物流和支付&#xff0c;老外没有大陆支付宝&#xff0c;另外1688不支持海外物流。作为跨境出口的代采平台&#xff0c;pandabuy解决了这个问题 通过对接1688的搜索api&#xf…