Spring Cloud Alibaba Sentinel限流

Sentinel 是阿里巴巴开源的分布式系统的流量防卫组件,Sentinel 把流量作为切入点,从流量控制,熔断降级,系统负载保护等多个维度保护服务的稳定性。

本示例演示如何使用 Sentinel starter 完成 Spring Cloud 应用的限流管理。

Sentinel 提供了两种配置限流规则的方式:代码配置 和 控制台配置。本示例使用的方式为通过控制台配置。代码配置可参考Sentinel 官方文档

控制台

1. 下载控制台

2. 启动控制台

控制台为springboot应用,直接使用命令java -jar java -jar sentinel-dashboard.jar,默认的端口为8080

快速开始

1. 引入依赖

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

2. 限流埋点

  1. HTTP埋点

    Sentinel starter 默认为所有的 HTTP 服务提供了限流埋点,如果只想对 HTTP 服务进行限流,那么只需要引入依赖,无需修改代码。

  2. 自定义埋点

    如果需要对某个特定的方法进行限流或降级,可以通过 @SentinelResource 注解来完成限流的埋点

    @SentinelResource("test")
    @GetMapping("test")
    public String test(){
      	return "test";
    }
    

    也可以通过原始的 SphU.entry(xxx) 方法进行埋点。Sentinel 官方文档

3. application.yml

server:
  port: 8040

spring:
  application:
    name: sentinel-example
  cloud:
    sentinel:
      transport:
      	# 控制台地址
        dashboard: localhost:8080

限流规则

1. 访问控制台

访问http://localhost:8080页面,左侧就会出现注册的应用,点击流控规则即可看到当前的限流。如果控制台中没有应用,则需要访问一下接口,因为 Sentinel 使用了lazyload策略。

2. 配置http url限流

url为绝对路径,为方便测试阈值设置为1


访问http://localhost:8040/hello,当QPS大于1时,返回默认的错误信息
Blocked by Sentinel (flow limiting)

3. 配置自定义限流
点击新增流控规则,资源名填写 @SentinelResource 注解 value 字段的值

访问http://localhost:8040/test,当QPS大于1时,返回spring默认的500错误页面

限流处理

1. 默认的限流异常处理

默认的限流异常处理返回Blocked by Sentinel (flow limiting),如需自定义返回信息,需要实现BlockExceptionHandler接口

@Component
public class CustomBlockExceptionHandler implements BlockExceptionHandler {

    @Override
    public void handle(HttpServletRequest request, HttpServletResponse response, BlockException e) throws Exception {
        PrintWriter writer = response.getWriter();
        writer.write("current limiting");
        writer.flush();
        writer.close();
    }
}

2. @SentinelResource注解的限流异常处理

如果需要自定义处理逻辑,填写 @SentinelResource 注解的 blockHandler 属性(针对所有类型的 BlockException,需自行判断)或 fallback 属性(针对熔断降级异常),注意对应方法的签名和位置有限制,详情见 Sentinel 注解支持文档

@RestController
public class TestController {
	/*
     blockHandler 函数访问范围需要是 public,返回类型需要与原方法相匹配,
     参数类型需要和原方法相匹配并且最后加一个额外的参数,类型为 BlockException。
     blockHandler 函数默认需要和原方法在同一个类中。
     若希望使用其他类的函数,则可以指定 blockHandlerClass 为对应的类的 Class 对象,
     注意对应的函数必需为 static 函数,否则无法解析。

     fallback函数针对熔断降级异常
     */
    @SentinelResource(value = "test", blockHandler = "testHandler", fallback = "testFallback")
    @GetMapping("test")
    public String test(){
    	// 模拟异常,进入fallback
        // throw new RuntimeException();
        return "test";
    }

    @GetMapping("hello")
    public String hello(){
        return "hello";
    }

    public String testHandler(BlockException e){
        return "test limiting";
    }

	public String testFallback() {
        return "test error";
    }
}

Datasource

动态规则扩展

由于控制台配置为内存型,应用重启后限流就会重置。所以选择使用动态规则配置,即使应用重启限流依然存在。

1. application.yml

spring:
  application:
    name: sentinel-example
  cloud:
    sentinel:
      transport:
        # 控制台地址
        dashboard: localhost:8080
      datasource:
        # ds1为datasource的名称,file为datasource的类型
        ds1.file:
          # 文件地址
          file: classpath:flowrule.json
          # 规则类型,flow为限流
          rule-type: flow
          # 规则数据的类型,默认为json
          data-type: json
        # 除file类型都需要引入对应的依赖
        ds2.nacos:
          server-addr: localhost:8848
          data-id: flowrule.json
          rule-type: flow

2. 规则数据

[
  {
    "resource": "/hello",
    "controlBehavior": 0,
    "count": 1,
    "grade": 1,
    "limitApp": "default",
    "strategy": 0
  },
  {
    "resource": "/test",
    "controlBehavior": 0,
    "count": 1,
    "grade": 1,
    "limitApp": "default",
    "strategy": 0
  }
]

常量参考RuleConstant

resource:资源名称
controlBehavior:流量控制,0为直接拒绝
count:限流阈值
grade:限流阈值类型,1为QPS
limitApp:根据调用方限流,default为不区分调用者
strategy:根据调用关系选择策略,0为直连

示例代码

作者博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自动控制节水灌溉技术的高低代表着农业现代化的发展状况,灌溉系统自动化水平较低是制约我国高效农业发展的主要原因。本文就此问题研究了单片机控制的滴灌节水灌溉系统,该系统可对不同土壤的湿度进行监控,并按照作物对土壤湿度的要求进行适时、适量灌水,其核心是单片机和PC机构成的控制部分,主要对土壤湿度与灌水量之间的关系、灌溉控制技术及设备系统的硬件、软件编程各个部分进行了深入的研究。 单片机控制部分采用上下位机的形式。下位机硬件部分选用AT89C51单片机为核心,主要由土壤湿度传感器,信号处理电路,显示电路,输出控制电路,故障报警电路等组成,软件选用汇编语言编程。上位机选用586型以上PC机,通过MAX232芯片实现同下位机的电平转换功能,上下位机之间通过串行通信方式进行数据的双向传输,软件选用VB高级编程语言以建立友好的人机界面。系统主要具有以下功能:可在PC机提供的人机对话界面上设置作物要求的土壤湿度相关参数;单片机可将土壤湿度传感器检测到的土壤湿度模拟量转换成数字量,显示于LED显示器上,同时单片机可采用串行通信方式将此湿度值传输到PC机上;PC机通过其内设程序计算出所需的灌水量和灌水时间,且显示于界面上,并将有关的灌水信息反馈给单片机,若需灌水,则单片机系统启动鸣音报警,发出灌水信号,并经放大驱动设备,开启电磁阀进行倒计时定时灌水,若不需灌水,即PC机上显示的灌水量和灌水时间均为0,系统不进行灌水。
智慧农业是一种结合了现代信息技术,包括物联网、大数据、云计算等,对农业生产过程进行智能化管理和监控的新模式。它通过各种传感器和设备采集农业生产中的关键数据,如大气、土壤和水质参数,以及生物生长状态等,实现远程诊断和精准调控。智慧农业的核心价值在于提高农业生产效率,保障食品安全,实现资源的可持续利用,并为农业产业的转型升级提供支持。 智慧农业的实现依赖于多个子系统,包括但不限于设施蔬菜精细化种植管理系统、农业技术资料库、数据采集系统、防伪防串货系统、食品安全与质量追溯系统、应急追溯系统、灾情疫情防控系统、农业工作管理系统、远程诊断系统、监控中心、环境监测系统、智能环境控制系统等。这些系统共同构成了一个综合的信息管理和服务平台,使得农业生产者能够基于数据做出更加科学的决策。 数据采集是智慧农业的基础。通过手工录入、传感器自动采集、移动端录入、条码/RFID扫描录入、拍照录入以及GPS和遥感技术等多种方式,智慧农业系统能够全面收集农业生产过程中的各种数据。这些数据不仅包括环境参数,还涵盖了生长状态、加工保存、检验检疫等环节,为农业生产提供了全面的数据支持。 智慧农业的应用前景广阔,它不仅能够提升农业生产的管理水平,还能够通过各种应用系统,如库房管理、无公害监控、物资管理、成本控制等,为农业生产者提供全面的服务。此外,智慧农业还能够支持政府监管,通过发病报告、投入品报告、死亡报告等,加强农业产品的安全管理和质量控制。 面对智慧农业的建设和发展,存在一些挑战,如投资成本高、生产过程标准化难度大、数据采集和监测的技术难题等。为了克服这些挑战,需要政府、企业和相关机构的共同努力,通过政策支持、技术创新和教育培训等手段,推动智慧农业的健康发展。智慧农业的建设需要明确建设目的,选择合适的系统模块,并制定合理的设备布署方案,以实现农业生产的智能化、精准化和高效化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值