ToB企服应用市场:ToB评测及商务社交产业平台

标题: Sentinel [打印本页]

作者: 守听    时间: 2025-2-18 10:51
标题: Sentinel
一、Sentinel 简介

Sentinel 是阿里巴巴开源的分布式体系流量防卫组件,提供流量控制熔断降级体系自顺应保护等功能。作为 Spring Cloud Alibaba 核心组件,广泛应用于电商秒杀、直播等高并发场景,防止体系因突发流量瓦解。
核心特性


二、环境预备

1. 控制台安装

  1. # 下载最新版本(以 1.8.5 为例)
  2. wget https://github.com/alibaba/Sentinel/releases/download/1.8.5/sentinel-dashboard-1.8.5.jar
  3. # 启动控制台(默认端口 8080)
  4. java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -jar sentinel-dashboard-1.8.5.jar
复制代码
访问 http://localhost:8080(默认账号暗码:sentinel/sentinel)
2. Spring Boot 集成

  1. <!-- pom.xml -->
  2. <dependency>
  3.     <groupId>com.alibaba.cloud</groupId>
  4.     <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
  5.     <version>2022.0.0.0</version>
  6. </dependency>
复制代码
  1. # application.yml
  2. spring:
  3.   cloud:
  4.     sentinel:
  5.       transport:
  6.         dashboard: localhost:8080
  7.       eager: true # 立即注册到控制台
复制代码
三、核心功能实战

1. 流量控制

定义资源
  1. @GetMapping("/order")
  2. @SentinelResource(value = "createOrder", blockHandler = "handleFlowLimit")
  3. public String createOrder() {
  4.     return "订单创建成功";
  5. }
  6. // 流控处理函数
  7. public String handleFlowLimit(BlockException ex) {
  8.     return "系统繁忙,请稍后再试!";
  9. }
复制代码
控制台配置
2. 熔断降级

  1. @SentinelResource(value = "paymentService",
  2.                   fallback = "paymentFallback",
  3.                   exceptionsToIgnore = {IllegalArgumentException.class})
  4. public String processPayment(String orderId) {
  5.     // 业务逻辑
  6. }
  7. // 降级处理函数
  8. public String paymentFallback(String orderId, Throwable t) {
  9.     return "支付服务暂时不可用,请稍后重试";
  10. }
复制代码
熔断规则配置

3. 热门参数限流

  1. @GetMapping("/product")
  2. @SentinelResource(value = "queryProduct", blockHandler = "paramFlowHandler")
  3. public String getProduct(@RequestParam("pid") String productId) {
  4.     return "商品详情";
  5. }
  6. // 热点参数处理
  7. public String paramFlowHandler(String productId, BlockException ex) {
  8.     return "当前商品访问火爆,请稍后再试";
  9. }
复制代码
参数规则配置
  1. ParamFlowRule rule = new ParamFlowRule("queryProduct")
  2.     .setParamIdx(0) // 参数索引
  3.     .setCount(10);  // 阈值
  4. ParamFlowRuleManager.loadRules(Collections.singletonList(rule));
复制代码
四、高级配置

1. 规则持久化(Nacos 集成)

  1. <dependency>
  2.     <groupId>com.alibaba.csp</groupId>
  3.     <artifactId>sentinel-datasource-nacos</artifactId>
  4. </dependency>
复制代码
  1. spring:
  2.   cloud:
  3.     sentinel:
  4.       datasource:
  5.         ds1:
  6.           nacos:
  7.             server-addr: localhost:8848
  8.             dataId: sentinel-rules
  9.             groupId: DEFAULT_GROUP
  10.             rule-type: flow
复制代码
2. 集群流控

  1. // 启动 Token Server
  2. ClusterServerConfigManager.loadServerNamespaceSet(Collections.singleton("App-Cluster"));
复制代码
  1. # token-server 配置
  2. spring:
  3.   cloud:
  4.     sentinel:
  5.       transport:
  6.         client-ip: 192.168.1.10
  7.         cluster-server:
  8.           port: 18730
复制代码
五、生产实践发起

   完整示例代码:Sentinel Demo 项目

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4