栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spring cloud alibaba 学习(十三)使用Sentinel实现流量控制

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

spring cloud alibaba 学习(十三)使用Sentinel实现流量控制

目录

前言一、安装 sentinel-dashboard二、接入客户端


前言

    Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。

Sentinel 的主要工作机制如下:

    对主流框架提供适配或者显示的 API,来定义需要保护的资源,并提供设施对资源进行实时统计和调用链路分析。

    根据预设的规则,结合对资源的实时统计信息,对流量进行控制。同时,Sentinel 提供开放的接口,方便您定义及改变规则。

    Sentinel 提供实时的监控系统,方便您快速了解目前系统的状态。


一、安装 sentinel-dashboard

1、下载

https://github.com/alibaba/Sentinel/releases

2、启动

java -Dserver.port=8080  -jar sentinel-dashboard.jar

3、访问页面

http://172.16.10.159:8080/

用户名密码 默认为 sentinel/sentinel

二、接入客户端

1、配置文件新增配置项

# 本地启动的端口,与dashboard服务端进行数据交互
spring.cloud.sentinel.transport.port=8719
# dashboard服务端地址端口
spring.cloud.sentinel.transport.dashboard=172.16.10.159:8080
# 心跳客户端地址,本机地址
spring.cloud.sentinel.transport.client-ip=192.168.100.73

2、接口

public interface SentinelService {

    public Map test();
}

3、实现类

使用 @SentinelResource 注解,指定resource 的名称和 限流时的回调 blockHandler

@Service
public class SentinelServiceImpl implements SentinelService {

    @SentinelResource(value = "sentinel-test", blockHandler = "testHandler")
    @Override
    public Map test(){
        ImmutableMap map = ImmutableMap.of(
                "code", 200,
                "success", true);
        return map;
    }

    public Map testHandler(BlockException e) {
        ImmutableMap map = ImmutableMap.of(
                "code", 500,
                "reason", "服务流量控制",
                "error", e);
        return map;
    }
}

4、controller

@RestController
@RequestMapping("/sentinel")
public class SentinelController {

    @Autowired
    private SentinelService sentinelService;

    @GetMapping("/test")
    public Map test(){
        return sentinelService.test();
    }
}

5、访问controller中test接口

访问接口之后,打开sentinel 控制台,能够找到对应的客户端,找到簇点链路,找到指定的 resource 名称

点击右侧流控,添加流量规则


6、增加流量规则之后,连续多次访问controller接口,当请求速率大于规则里的QPS时,返回值会出现以下情况:

进入了 自定义的 testHandler( )

{
    "code": 500,
    "reason": "服务流量控制",
    "error": {
        "cause": null,
        "stackTrace": [],
        "rule": {
            "resource": "sentinel-test",
            "limitApp": "default",
            "grade": 1,
            "count": 1.0,
            "strategy": 0,
            "refResource": null,
            "controlBehavior": 0,
            "warmUpPeriodSec": 10,
            "maxQueueingTimeMs": 500,
            "clusterMode": false,
            "clusterConfig": {
                "flowId": null,
                "thresholdType": 0,
                "fallbackToLocalWhenFail": true,
                "strategy": 0,
                "sampleCount": 10,
                "windowIntervalMs": 1000
            }
        },
        "ruleLimitApp": "default",
        "message": null,
        "suppressed": [],
        "localizedMessage": null
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/736673.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号