首页 > 其他分享 >Sentinel——流控规则

Sentinel——流控规则

时间:2023-12-04 14:35:35浏览次数:33  
标签:depart 流控 get Depart 规则 Sentinel import id

流控规则

流控规则是用于完成服务流控的。服务流控即对访问流量的控制,也称为服务限流。Sentine实现流控的原理是监控应用流量的 QPS 或并发线程数等指标,当达到指定的值时对再到来的请求进行进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。

设置流控规则

代码设置流控调用的方法,@SentinelResource(value = "get", fallback = "getFallBack", blockHandler = "getFlowFallBack")

package com.zjw.controller;

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.zjw.domain.Depart;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.util.List;

/**
 * <p>
 * 部门表 前端控制器
 * </p>
 *
 * @author zjw
 * @since 2023-11-20
 */
@RestController
@RequestMapping("/depart")
@Slf4j
public class DepartController {

    @Resource
    private RestTemplate restTemplate;

    private static final String PROVIDER_URL = "http://depart-provider/depart";

    /**
     * 根据id查询部门
     */
    // 发生异常,跳到500空白页
//    @SentinelResource(value = "get")
    // 发生异常会降级,调用getFallBack方法
//    @SentinelResource(value = "get", fallback = "getFallBack")
    //发生异常会降级,调用getFallBack方法, 触发流控,会调用流控的getFlowFallBack方法
    @SentinelResource(value = "get", fallback = "getFallBack", blockHandler = "getFlowFallBack")
    // 发生异常会降级,调用getFallBack方法,
    @GetMapping("/get/{id}")
    public Depart get(@PathVariable Long id) {
        return restTemplate.getForObject(PROVIDER_URL + "/get/" + id, Depart.class);
    }

    /**
     * 服务流控使用的方法.
     * 需要指定BlockException参数,否则调用降级方法
     */
    public Depart getFlowFallBack(Long id, BlockException e) {
        log.info("id = " + id);
        log.info("exception = " + e.getMessage());
        Depart depart = new Depart();
        depart.setId(id);
        depart.setName("flow fall back");
        return  depart;
    }

    /**
     * 服务降级使用的方法
     */
    public Depart getFallBack(Long id, Throwable t) {
        log.info("id = " + id);
        log.info("throwable = " + t.getMessage());
        Depart depart = new Depart();
        depart.setId(id);
        depart.setName("no this depart");
        return  depart;
    }

控制台设置流控的规则:

如果调用的服务停止了,会触发降级,调用getFallBack方法。

当请求QPS超过3时会触发流控规则,调用getFlowFallBack方法。

api设置流控规则

通过控制台设置的流控规则会在服务重启后失效,可以通过sentinel的api在代码中指定规则

package com.zjw;

import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.util.ArrayList;
import java.util.List;

@SpringBootApplication
public class ConsumerFlowRule8080Application {

    public static void main(String[] args) {
        SpringApplication.run(ConsumerFlowRule8080Application.class, args);
        //初始化流控规则
        initFlowRule();
    }

    private static void initFlowRule() {
        FlowRuleManager.loadRules(configFlowRule());
    }

    private static List<FlowRule> configFlowRule() {
        List<FlowRule> flowRuleList = new ArrayList<>();
        FlowRule rule = new FlowRule();
        // 资源名
        rule.setResource("get");
        // 针对来源
        rule.setLimitApp("default");
        // 阈值类型 (并发线程数 0: thread count, 1: QPS).
        // RuleConstant.FLOW_GRADE_THREAD 0
        // RuleConstant.FLOW_GRADE_QPS 1
        rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
        // 单机阈值
        rule.setCount(3);
        flowRuleList.add(rule);
        return flowRuleList;
    }
}

标签:depart,流控,get,Depart,规则,Sentinel,import,id
From: https://www.cnblogs.com/zjw-blog/p/17874830.html

相关文章

  • 在Winform应用中增加通用的业务编码规则生成
    在我们很多应用系统中,往往都需要根据实际情况生成一些编码规则,如订单号、入库单号、出库单号、退货单号等等,我们有时候根据规则自行增加一个函数来生成处理,不过我们仔细观察后,发现它们的编码规则有很大的共通性,因此可以考虑使用一些通用的业务编码规则生成,从而在系统中统一维护即......
  • Sentinel——服务降级
    目录简介Sentinel方法级降级Sentinel类级降级OpenFeign类级降级简介服务降级是一种增强用户体验的方式。当用户的请求由于各种原因被拒后,系统返回-一个事先设定好的、用户可以接受的,但又令用户并不满意的结果。这种请求处理方式称为服务降级。Sentinel方法级降级导入依赖......
  • Sentinel——控制台使用
    简介官网:https://sentinelguard.io/随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发......
  • Go--命名规则
    在Go语言中,项目名和文件名的命名规则有一些建议和惯例。以下是一些常见的规则和最佳实践:项目名:项目名应该简短、有意义,并能够清晰地表达项目的目的或功能。项目名通常使用小写字母,使用连字符或下划线分隔单词。项目名不应包含特殊字符或空格。项目名应尽量避免与现有的库......
  • Sentinel 微服务保护
    Sentinel微服务保护​#Sentinel#​本文章为个人摘抄笔记,原文章来源于www.cnblogs.com/xiegongz...‍Sentinel是阿里巴巴开源的一款微服务流量控制组件。官网地址:https://sentinelguard.io/zh-cn/index.html雪崩问题与解决方式所谓的雪崩指的是:微服务之间相互调用,调用链......
  • antd 表单外提交进行规则校验
    import{Form,Input,Button}from'antd';constMyForm=()=>{constonFinish=(values)=>{console.log('Formvalues:',values);};constvalidateFields=()=>{form.validateFields().then(()=>......
  • Suricata规则编写
    在高层次上,Suricata签名由三部分组成: Action:当流量符合规则时采取的行动 Header:一个标题,描述主机、IP地址、端口、协议和流流量方向(传入或传出) Options:选项,指定诸如签名ID(sid)、日志信息、匹配数据包内容的正则表达式、分类类型,以及其他可以帮助缩小识别合法和......
  • SpringMvc集成开源流量监控、限流、熔断降级、负载保护组件Sentinel
    前言:作者查阅了Sentinel官网、51CTO、CSDN、码农家园、博客园等很多技术文章都没有很准确的springmvc集成Sentinel的示例,因此整理了本文,主要介绍SpringMvc集成SentinelSpringMvc集成Sentinel一、Sentinel介绍随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel......
  • SPSS Modeler分析物流发货明细数据:K-MEANS(K均值)聚类和Apriori关联规则挖掘|附代码数据
    物流发货明细数据在现代物流业中扮演着至关重要的角色。通过对这些数据进行挖掘和分析,我们可以发现隐含在背后的供应链运营规律和商业模式,从而指导企业在物流策略、成本管理和客户服务等方面做出更加科学和有效的决策。SPSSModeler是一款功能强大、界面友好的数据挖掘和分析工具,......
  • 模拟体育竞技分析:乒乓球比赛规则
     要求:1)模拟体育竞技分析:(不同学号选做不同题目,必做题)‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬......