Sentinel -- sentinel控制台的简单应用,java核心技术电子版下载

package com.shadow.web;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class UserController {

@GetMapping(“login”)

public String login() throws InterruptedException {

System.out.println(“login----”);

return “success”;

}

@GetMapping(“log”)

public String log(){

System.out.println(“log----”);

return “success”;

}

}

3、yml配置

server:

port: 9000

spring:

application:

name: register-server

sentinel:

transport:

port: 8719 #如果加了客户端他就会开启一个 http server 为了dashboard 能够发过来

dashboard: localhost:8080

spring.cloud.sentinel.transport.dashboard——sentinel控制台的ip和端口地址

spring.cloud.sentinel.transport.port——sentinel客户端和控制台通信的端口

然后启动项目;继而访问localhost:8080/login;跟着刷新sentinel的控制台可以看到sentinel已经发现了我们的项目server-register

Sentinel -- sentinel控制台的简单应用,java核心技术电子版下载

并且可以在簇点链路中看到刚刚那个请求

Sentinel -- sentinel控制台的简单应用,java核心技术电子版下载

接下来就对这个请求进行流控、降级、授权、热点等配置等等配置了;先来介绍如何添加流控吧;点击+流控的按钮

Sentinel -- sentinel控制台的简单应用,java核心技术电子版下载

怎么配置呢?首先了解这概念吧

sentinel 术语

=========================================================================

1、资源:标识资源的唯一名称,springboot项目默认为controller当中的请求路径,也可以在客户端中使用SentinelResource配置;比如你有个service当中的xx方法;你想对这个xx方法进行流控那么这个xx方法必须是一个资源;

Sentinel -- sentinel控制台的简单应用,java核心技术电子版下载

2、针对来源:Sentinel可以针对服务调用者进行限流,填写微服务名称即spring.application.name,默认为default,不区分来源

3、阈值类型、单机阈值

QPS——每秒钟的请求数量,当调用该资源的QPS达到阈值的时候,进行限流;

线程数——当调用该资源的线程数达到阈值的时候,进行限流

4、是否集群:默认不集群;

5、流控模式:

直接:当资源调用达到限流条件的时,直接限流;

关联:当关联的资源请求达到阈值的时候,限流自己;

链路:例如Service中的@SentinelResource指向的接口,进行链路限流

6、流控效果:

快速失败:直接失败;

Warm Up:根据冷加载因子默认值为3的值,从阈值/3,经过预热时长,才达到设置的QPS阈值;

排队等待:匀速排队,让请求匀速通过,阈值类型必须设置为QPS,否则无效

QPS直接失败

=====================================================================

![在这里插入图片描述](https://www.icode9.com/i/ll/?i=76c280e8a30041eb8947162ab3ef5505.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0

【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】

开源分享完整内容戳这里

1lcmN1cmlhbGE=,size_16,color_FFFFFF,t_70#pic_center)

上面设置的效果是,1秒钟内请求/login资源的次数达到1次以上的时候,进行限流

效果演示


首先一秒请求一次login没有问题;然后发挥你手速;一秒超过一次之后页面返回Blocked by Sentinel (flow limiting);如果手速不够多练练吧——总归有办法的

Sentinel -- sentinel控制台的简单应用,java核心技术电子版下载

线程数直接失败

=====================================================================

把login方法让其睡眠一秒;因为无论你单身多少年;你的手速不可能超过计算机;所以在刷新的情况下永远只有一个线程;如果让他睡眠1秒;这样就能模拟出来服务器这边开多个线程来处理的场景了;

@GetMapping(“login”)

public String login() throws InterruptedException {

System.out.println(“login----”);

Thread.sleep(1000);

return “success”;

}

改完之后重启你的项目,然后先访问一次login;因为你重启之后sentinel控制台这边就检测不到了;需要重新访问一次;跟着添加流控规则

Sentinel -- sentinel控制台的简单应用,java核心技术电子版下载

效果演示


首先慢慢刷新login请求;——等睡眠时间过;服务器永远只有一个线程,发觉没问题;但是你疯狂在地址栏里面点击回车(注意不要去刷新,因为刷新是会等到服务器返回之后才能点击;所以效果演示不出来,最好是点击回车在地址栏)就会失败

Sentinel -- sentinel控制台的简单应用,java核心技术电子版下载

流控模式关联

====================================================================

首先把login方法当中的睡眠删除;然后重启项目,访问一下login;继而去配置流控规则

Sentinel -- sentinel控制台的简单应用,java核心技术电子版下载

上述配置当1秒内访问/log的次数大于2的时候,限流/login

效果演示使用postman来密集访问/log(QPS=3),然后我们手动浏览器请求/login,看看效果。postman的如下图

效果演示


在外面没有启动postman的时候 访问login没有问题;当我们启动postman之后 log的qps达到了阈值;这个时候再去访问login 被限流了

效果如下图

Sentinel -- sentinel控制台的简单应用,java核心技术电子版下载

上一篇:初识Sentinel


下一篇:Sentinel 之 核心源码