SpringCloudGateway整合Sentinel的一天

之前有用过一次,但没有整理忘记了,今天又是很狗的一天,所以记录一下,不做重复工作。

关于版本的问题,没有太多坑,SpringBoot,SpringCloud,SpringAlibaba,这三个版本统一适配就可以了。版本适配可以参考(遵守即可):版本发布说明 | https://sca.aliyun.com

1-LInux / Windows安装Sentinel Dashboard(控制台),下载地址:Releases · alibaba/Sentinel (github.com)

具体流程就不赘述了

docker安装一行搞定,最新版本则去掉冒号及后边的,其他版本则修改最后的版本号即可,示例为1.8.3.

这行命令是用来运行镜像的,会有人问了,镜像还没search,也没有pull,怎么直接就run了呢?这是个偶然发现的,执行之后会Error,别着急,然后会自动去pull镜像,然后run,一键启动了,哈哈哈。

docker run -d -p 8858:8858 -p 8719:8719 --restart=always bladex/sentinel-dashboard:1.8.3

Sentinel Dashboard就到这里了,应该没啥问题了。

2-重中之重,Java代码模块的。

创建一个Gateway项目,整合其他网关也可以,但没有实际操作过就不发言了,仅以Gateway为主。这里只发布gateway整合sentinel相关的内容,如果gateway不能正常运行,就先把gateway正常跑起来之后,再看这里整合sentinel。

上依赖,直接上三个,不分开整了,最终效果就是在nacos配置流控规则。 

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

        <!--Sentinel 整合 Gateway -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
        </dependency>

        <!-- 通过nacos持久化流控规则 -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>

上yml配置:

spring:
    sentinel:
      eager: true
      transport:
        dashboard: 控制台安装服务器的IP:8858
      scg:
        fallback:
          mode: response
          response-status: 666
          response-body: 网速太快了
# 如果不需要流控规则持久化,下边的就不需要了
      datasource:
        flow-rule: #自定义,写啥都行
          nacos:
            server-addr: #nacos.server-addr
            namespace: #nacos.namespace
            username: #nacos.username
            password: #nacos.password
            dataId: sentinel-flow-rule #自定义,写啥都行
            data-type: json
            rule-type: gw_flow #这里的意思是流控规则的数据,还有其他类型,参考com.alibaba.cloud.sentinel.datasource.RuleType,选择对应的类型。
        api-group:#(自定义,写啥都行)
          nacos:
            server-addr: nacos.server-addr
            namespace: nacos.namespace
            username: @nacos.username
            password: nacos.password
            dataId: sentinel-api-group #(自定义,写啥都行)
            data-type: json
            rule-type: gw_api_group #这里的意思是API分组的数据

没有具体了解过,如果控制台没有展示API分组,请求链路菜单,则在启动器添加下列代码。

添加之前的控制台展示:

  public static void main(String[] args) {
        // 添加此代码,在Sentinel控制台中做判断使用
        System.setProperty("csp.sentinel.app.type", "1");
        SpringApplication.run(GatewayApplication.class, args);
        log.info(">>>>>>>>> GatewayApplication start success! >>>>>>>>>>");
    }

 添加之后的展示:

就是这个样子了。

正常访问的展示,这个如果没有请求就没有数据展示,没有数据的情况下可以多请求几次试试,还是没有那就不要继续了,先把这个解决掉,重复之前的操作。

控制台操作来了。

这里是做API分组的流控,也就是,指定某个具体的接口,url 的流控规则。

 添加成功就有一条数据了。

流控规则的两个地方。

选择自定义的API分组,进行流控规则限制,具体参数查看官方文档。写不动了。

 这样基本上就可以了,那就试试效果。

正常:

限流后:网速太快了就是在上边yml配置写的限流后的响应信息。

到这里基本上流程就通了。

然后看看naocs的持久化流控规则。

1-nacos创建一个API分组文件,名为: sentinel-api-group(yml文件中的),类型:json

[
    {
            "apiName": #自定义,
            "predicateItems": [
                {
                    "pattern": #具体的接口url,
                    "matchStrategy": 0
                }
            ]
        }
#多个逗号隔开继续往下写就好了

]

2-nacos创建一个流控规则文件,名为: sentinel-flow-rule(yml文件中的),类型:json

[
    {
            "resource": #这个是API分组的apiName,一定要一样,
            "resourceMode": 1,
            "grade": 1,
            "count": 1,
            "interval": 1,
			"controlBehavior": 0,
            "burst": 0,
            "maxQueueingTimeoutMs": 500
        }
#多个逗号隔开继续往下写就好了
]

还有一点就是,nacos持久化后,控制台的修改不会持久化到nacos,sentinel重启之后,还是nacos的配置,所以修改还是直接从nacos修改发布就可以了,控制台就获取到最新的了。

想想应该没啥了,至少流程跑通了,细节点慢慢研究。实在是写不动了,希望帮助有缘人。

  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值