springboot sentinel使用示例(基于sentinel 1.8),流控,降级,sentinel-dashboard使用,blockHandler和fallback

本文详细介绍了如何在Spring Boot项目中集成和配置阿里巴巴Sentinel,包括设置dashboard连接、创建自定义流控和降级处理,以及如何在sentinel-dashboard上管理和应用规则。

废话不多说,直接上代码,首先看pom依赖:

<dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>2.2.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.3.12.RELEASE</version>
        </dependency>
    </dependencies>

项目配置application.properties配置如下:

spring.application.name=sentinel-test-001
server.port=8080
spring.cloud.sentinel.transport.dashboard=localhost:8081
spring.cloud.sentinel.transport.port=8791

这是你自己项目需要用的,但是在启动项目之前,先得把sentinel-dashboard项目启动起来,可以从github直接下载sentinel源码下来自己编译启动sentinel源码位置 或者下载sentinel-dashboard发型版sentinel发行版list

因为我们自己项目中使用sentinel会向sentinel-dashboard注册相关信息,可以在sentinel-dashboard对相关的服务、接口进行流控、降级设置。sentinel-dashboard也是一个springboot项目

需要注意的是这里面有两个地方需要配置注意一下:
spring.cloud.sentinel.transport.dashboard=localhost:8081这个是sentinel-dashboard的访问位置,其中端口号可以在sentinel-dashboard指定,如果是发行版的jar包,可以在启动jar的时候加入server.port参数,指定自己需要的端口号。
spring.cloud.sentinel.transport.port=8791这个是sentinel-dashboard和你自己项目通信的端口,sentinel-dashboard会通过HTTP访问你自己项目的这个端口号进行相关配置的推送。

因此,这里可以看出, sentinel-dashboard是需要双方相互通信的,需要确保二者的IP都能够互相访问到。

将sentinel-dashboard启动好之后,通过localhost:8081(我这里指定sentinel-dashboard的端口号为8081了,默认如果不改的话就是8080),默认用户名和密码都是sentinel,刚开始我们没有启动访问自己的项目,是没有任何东西的,
我们启动自己的项目,项目就一个controller:

@SpringBootApplication
public class Bootstrap {
    public static void main(String[] args) {
        SpringApplication.run(Bootstrap.class);
    }
}


@RestController
@RequestMapping("/test")
public class TestController {

   @GetMapping("/sayHello")
    public String sayHello(String name ){
        return "Hello World "+name;
    }
}

启动项目,访问localhost:8080/test/sayHello?name=test,这时候在看sentinel-dashboard页面的时候出现了自己的项目,
在这里插入图片描述

查看实时监控:在这里插入图片描述
查看簇点链路:
在这里插入图片描述

这时候我们对刚才访问的接口进行流控设置:
在这里插入图片描述
这时候查看流控规则,就有了我们刚才添加的规则:
在这里插入图片描述
这时候在访问刚才的接口,连续刷,就出现了如下的界面:
在这里插入图片描述

blockHandler

这是Sentinel默认的流控和返回,但是很多时候我们需要自己设定自己需要的返回内容,这时候需要使用SentinelResource自定义流控返回:

@RestController
@RequestMapping("/test")
public class TestController {

    @GetMapping("/sayHello")
    @SentinelResource(value = "testSayHello",blockHandler = "blockHandler")
    public String sayHello(String name ){
        return "Hello World "+name;
    }

    public String blockHandler(String name,BlockException e){
        e.printStackTrace();
        return "Blocked "+name;
    }
}

这时候在访问接口,然后在sentinel-dashboard页面上显示如下:
在这里插入图片描述

定义流控规则如下:
在这里插入图片描述

然后在刷新接口,返回如下:
在这里插入图片描述

这时候返回的就是我们刚才定义的返回内容,另外这里blockHandler对应的方法应该和被流控的方法参数一样,并且参数列表最后,多一个BlockException参数。

fallback

blockHandler定义了流控触发后的处理逻辑,fallback则是当接口发生错误异常后会触发的逻辑:

@RestController
@RequestMapping("/test")
public class TestController {
    private AtomicInteger count = new AtomicInteger();
    @GetMapping("/sayHello")
    @SentinelResource(value = "testSayHello",blockHandler = "blockHandler",fallback = "fallback")
    public String sayHello(String name ){
        if(count.incrementAndGet() % 2 == 0 ){
            throw new RuntimeException("error");
        }
        return "Hello World "+name;
    }

    public String blockHandler(String name,BlockException e){
        e.printStackTrace();
        return "Blocked "+name;
    }

    public String fallback(String name,Throwable e){
        e.printStackTrace();
        return "Fallback "+name;
    }
}

触发异常后,响应如下:
在这里插入图片描述
这时候,就可以定义降级规则了:
在这里插入图片描述

当在1s内触发了两次异常之后,在30s之内,都会被流控了,在这里插入图片描述

这是开始入门,后续在接着研究。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值