Sentinel 使用详解、熔断降级实例

1、sentinel的下载和安装

sentinel下载地址:https://github.com/alibaba/Sentinel/releases
1.7.1下载地址: https://github.com/alibaba/Sentinel/releases/download/1.7.1/sentinel-dashboard-1.7.1.jar

Windows启动Sentinel

java -jar sentinel-dashboard-1.7.1.jar

访问地址:

http://localhost:8080 //默认端口为:8080,用户名和密码sentinel/sentinel

在这里插入图片描述
Windows启动下如果8080端口被占用,还可以使用其他端口,需要指定一下,如:

java -Dserver.port=8070 -Dcsp.sentinel.dashboard.server=localhost:8070 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.7.1.jar

Sentinel Linux后台启动:

nohup java -Dserver.port=8070 -Dcsp.sentinel.dashboard.server=localhost:8070 -Dproject.name=sentinel-dashboard -jar /java/sentinel-dashboard-1.7.1.jar &

Sentinel 指定日志目录启动:

java -Dserver.port=8070 -Dcsp.sentinel.dashboard.server=localhost:8070 -Dproject.name=sentinel-dashboard -Dcsp.sentinel.log.dir=C:\logs\sentinel-dashboard -jar sentinel-dashboard-1.7.1.jar

启动(是否注册Sentinel自己):
不注册Sentinel自己

java -Dserver.port=8070 -Dcsp.sentinel.log.dir=C:\logs\sentinel-dashboard -jar sentinel-dashboard-1.7.1.jar

注册Sentinel自己

java -Dserver.port=8070 -Dcsp.sentinel.dashboard.server=localhost:8070 -Dproject.name=sentinel-dashboard -Dcsp.sentinel.log.dir=C:\logs\sentinel-dashboard -jar sentinel-dashboard-1.7.1.jar

访问地址:

http://localhost:8070/

其他配置项参考:

-Dserver.port=8080:用于指定 Sentinel 控制台端口为 8080,如若8080端口冲突,可使用 -Dserver.port=新端口 进行设置。。
-Dcsp.sentinel.dashboard.server=localhost:8080:指定控制台地址和端口,会自动向该地址发送心跳包。地址格式为:hostIp:port,l配置成ocalhost:8080即监控自己
-Dproject.name=sentinel-dashboard:指定Sentinel控制台程序显示的名称
-Dcsp.sentinel.log.dir:指定Sentinel 日志文件目录,默认是:${user.home}/logs/csp/
-Dcsp.sentinel.api.port=xxxx:本地的 Sentinel 客户端端口(可选,默认是 8719,有冲突会尝试向后探测)。若启动多个应用,则需要通过 -Dcsp.sentinel.api.port=xxxx 指定客户端监控 API 的端口(默认是 8719)。
-Dcsp.sentinel.app.type=1:从 1.6.3 版本开始,控制台支持网关流控规则管理。启动参数以将您的服务标记为 API Gateway,在接入控制台时您的服务会自动注册为网关类型,然后您即可在控制台配置网关规则和 API 分组。

用户可以通过如下参数进行鉴权配置:
-Dsentinel.dashboard.auth.username=sentinel 用于指定控制台的登录用户名为 sentinel;
-Dsentinel.dashboard.auth.password=123456 用于指定控制台的登录密码为 123456;如果省略这两个参数,默认用户和密码均为 sentinel;
-Dserver.servlet.session.timeout=7200 用于指定 Spring Boot 服务端 session 的过期时间,如 7200 表示 7200 秒;60m 表示 60 分钟,默认为 30 分钟;

2、Sentinel规则管理及推送

一般来说,规则的推送有下面三种模式:

推送模式 说明 优点 缺点

1、原始模式

API 将规则推送至客户端并直接更新到内存中,扩展写数据源(WritableDataSource)
优点
简单,无任何依赖

缺点
不保证一致性;规则保存在内存中,重启即消失。严重不建议用于生产环境

2、Pull 模式

扩展写数据源(WritableDataSource), 客户端主动向某个规则管理中心定期轮询拉取规则,这个规则中心可以是 RDBMS、文件 等
优点
简单,无任何依赖;规则持久化 不保证一致性;

缺点
实时性不保证,拉取过于频繁也可能会有性能问题。

3、Push 模式

扩展读数据源(ReadableDataSource),规则中心统一推送,客户端通过注册监听器的方式时刻监听变化,比如使用 Nacos、Zookeeper 等配置中心。这种方式有更好的实时性和一致性保证。生产环境下一般采用 push 模式的数据源。
优点
规则持久化;一致性;快速

缺点
引入第三方依赖

3、整合项目配置Sentinel,在Sentinel dashboard实现监控

1.如果是在spring cloud Alibaba 微服务架构的生态下,则引入一个包即可:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

如果在其他生态下,想要使用注解来定义资源需要引入 专属的AOP 包:

<
### Spring Cloud熔断降级的实现与配置 #### 使用Hystrix实现熔断降级Spring Boot项目中,通过`pom.xml`文件引入必要的依赖来支持Hystrix的功能[^1]。 ```xml <dependencies> <!-- Spring Boot Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Spring Cloud Hystrix --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> </dependencies> ``` 接着,在启动类上添加`@EnableCircuitBreaker`注解以启用熔断器功能。对于具体的客户端接口,则可以通过设置`fallbackFactory`属性来自定义回退逻辑[^2]。 ```java @EnableCircuitBreaker @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 针对Feign Client,可以像下面这样声明: ```java @FeignClient(value = "media-api", configuration = MultipartSupportConfig.class, fallbackFactory = MediaServiceClientFallbackFactory.class) @RequestMapping("/media") public interface MediaServiceClient { /*...*/ } ``` 这里的关键在于实现了`MediaServiceClientFallbackFactory`工厂类,用于生产特定于上下文环境下的默认响应实例。 #### 利用Sentinel达成相同目的 除了Hystrix之外,还可以采用阿里巴巴开源的产品——Sentinel来进行更细粒度的服务治理工作[^3]。它不仅能够完成基本的流量控制和服务熔断任务,还提供了丰富的监控面板帮助运维人员更好地理解当前集群状态。 要让应用具备这些特性,需先加入对应的starter包并调整application.yml中的参数设定;随后编写相应的规则处理器代码片段即可生效。 有关熔断机制的工作原理,简单来说就是当发现下游服务出现问题(比如超时未回复),则立即中断请求流程并向上传播失败信号给上游模块知道,待确认目标恢复正常运作后再解除限制措施继续接受新的连接尝试[^4]。 值得注意的是,尽管两者都涉及到对外部资源访问过程中的异常处理策略设计,但是它们侧重点有所不同:前者更多关注单个API级别的防护手段建设,后者则是站在整体架构层面思考如何保障业务连续性的解决方案之一[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会飞的小蜗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值