首页 > 其他分享 >SpringCloud Alibaba 【Sentinel】

SpringCloud Alibaba 【Sentinel】

时间:2022-09-30 11:02:45浏览次数:75  
标签:调用 SpringCloud Alibaba 熔断 sentinel 限流 dashboard Sentinel


文章目录


SpringCloud Alibaba 【Sentinel】_限流

Sentinel-dashboard搭建


一、官方地址

Sentinel-dashboard官方下载地址:​​https://github.com/alibaba/Sentinel/releases​​ 下载jar包

SpringCloud Alibaba 【Sentinel】_限流_02

SpringCloud Alibaba 官方版本说明:​​https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E​

Spring Cloud Alibaba Sentinel官网文档:​​https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel​

二、Sentinel-dashboard后台启动

2.1 windows环境

注意: Sentinel-dashboard需要在JDK1.8及以上的版本登录
由于Sentinel-dashboard使用Springboot写的一个项目,所以默认是集成了Tomcat,​​​但是Sentinel-dashboard的端口号默认是8080与Tomcat冲突,​​所以启动的时候需要修改端口号。

2.1.1 Sentinel-dashboard启动命令

这里使用​​8090​​端口作为访问Snetinel-dashboard的管理页面的端口号

【不指定输出日志的命令示例】

java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090 -Dproject.name=sentinel-dashboard -jar 【jar包的名称】

SpringCloud Alibaba 【Sentinel】_限流_03

【指定输出日志的命令】

java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090 -Dproject.name=sentinel-dashboard -Dcsp.sentinel.log.dir=C:logssentinel-dashboard -jar 【jar包的名称】

访问地址http://localhost:8070/

SpringCloud Alibaba 【Sentinel】_spring cloud_04

Sentinel-dashboard的登录密码和账户:
账户: sentinel
密码: sentinel

2.1.2 Sentinel dashboard控制台启动配置项

  • Dserver.port=8080:用于指定 Sentinel 控制台端口为 8080,如若8080端口冲突,可使用 -Dserver.port=新端口 进行设置。。
  • Dcsp.sentinel.dashboard.server=localhost:8080:指定控制台地址和端口,会自动向该地址发送心跳包。地址格式为:hostIp:port,l配置成ocalhost:8080即监控自己
  • Dproject.name=sentinel-dashboard:指定Sentinel控制台程序显示的名称
    -Dcsp.sentinel.log.dir:指定Sentinel 日志文件目录,默认是:${user.home}/logs/csp/
  • Dcsp.sentinel.api.port=xxxx:本地的 Sentinel 客户端端口(可选,默认是 8719,有冲突会尝试向后探测)。若启动多个应用,则需要通过 -Dcsp.sentinel.api.port=xxxx 指定客户端监控 API 的端口(默认是 8719)。
  • Dcsp.sentinel.app.type=1:从 1.6.3 版本开始,控制台支持网关流控规则管理。启动参数以将您的服务标记为 API Gateway,在接入控制台时您的服务会自动注册为网关类型,然后您即可在控制台配置网关规则和 API 分组。

用户可以通过如下参数进行鉴权配置:

  • Dsentinel.dashboard.auth.username=sentinel 用于指定控制台的登录用户名为 sentinel;
  • Dsentinel.dashboard.auth.password=123456 用于指定控制台的登录密码为 123456;如果省略这两个参数,默认用户和密码均为 sentinel;
  • Dserver.servlet.session.timeout=7200 用于指定 Spring Boot 服务端 session 的过期时间,如 7200 表示 7200 秒;60m 表示 60 分钟,默认为 30 分钟;
    同样也可以直接在 Spring properties 文件中进行配置。

注意:部署多台控制台时,session 默认不会在各实例之间共享,这一块需要自行改造。

这里说明一下:我们如果想要自定义一个Sentinel-dashboard的项目,则可以通过启动时配置一定的启动参数来完成,具体如下:

java -Dserver.port=8070 -Dcsp.sentinel.dashboard.server=localhost:8070 -Dproject.name=sentinel-helloworld -jar 【jar包的名称】

这里是指定一个名称为sentinel-helloworld的项目,
然后在eclispe里面通过配置JVM启动参数来实现将服务的流量监控数据同步到sentinel-dashboard的控制面板上

SpringCloud Alibaba 【Sentinel】_spring_05

-Dcsp.sentinel.dashboard.server=localhost:8070 
-Dproject.name=sentinel-helloworld

SpringCloud Alibaba 【Sentinel】_spring_06

启动完成后,多刷新几次,保证数据同步过来,也可以测试几次失效流量控制的情况

SpringCloud Alibaba 【Sentinel】_spring cloud_07

出现问题: 但是这样子有的情况下我也不清楚具体原因是什么,就是出不来,然后我就重新引入了 另外的Sentinel的依赖

解决问题:

<!--服务容错-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

通过配置文件的方式来完成dashBoard的搭建

spring:
cloud:
sentinel:
transport:
port: 8071 #跟控制台交流的端口,随意指定一个未使用的端口即可
dashboard: localhost:8070 # 指定控制台服务的地址

这时候我们再次重启Sentinel-dashboard和HelloWorld的这个项目

访问localhost:8080

登录,多次刷新应用程序

SpringCloud Alibaba 【Sentinel】_spring cloud_08

然后后来我有用Idea去使用我第一次的写法尝试后,是没有问题的,可能是我的Eclispe配置的问题,总之,是成功搭建完成了Sentinel-dashboard的环境

三、使用管理页面进行流控管理

上一篇的末尾写了一个使用代码的方式编程完成流量控制的方式。​​但是在日常的开发中,我们也需要使用到管理端完成流控规则的设置。​

这里我们把编程式的流量控制规则代码注释掉以后,再次访问http://localhost:8090/hello,去到Sentinel-dashboard,我们发现此时无论我们怎么刷新,此时都不会出现流量控制的现象。

SpringCloud Alibaba 【Sentinel】_spring boot_09


首先在管理页面新建一个流控规则

SpringCloud Alibaba 【Sentinel】_spring cloud_10

注意:这里的资源名是我们通过​SphU.entry("Hello World")​来设置的资源名,必须哟啊保证一致,否则无法生效

这是我们保存后,再次刷新,可以发现就有了流量控制的监控。

SpringCloud Alibaba 【Sentinel】_spring cloud_11

四、Sentinel的基本使用

4.1 定义资源

资源是Sentinel的关键概念。它可以是Java引用程序中的任何内容,例如:有应用程序提供的服务,或者是引用程序调用的其他应用程序,甚至可以是一段代码,在接下来的文档中,我们都会使用资源来描述迭代代码。
只要通过Sentinel API定义的代码,就是资源。能够被Sentinel保护起来,大部分情况下,可以使用方法签名,URL,甚至是服务名作为资源的标识来唯一的定位某一个资源。

使用Sentinel来进行资源保护,主要分为以下几个步骤:

  • 定义资源
  • 定义规则
  • 检验规则是否生效

只要有了资源,就可以在任何时候灵活的定义各种流量控制的规则。

4.1.1 方式一:主流框架的默认适配定义资源

为了减少开发过称中的复杂度,Sentinel对大多数的主流框架都有默认的适配,例如:Dubbo,SpringCloud,Web Servlet等等。,我们只需要引入对应的依赖即可方便的整合Sentinel。

4.1.2 方式二:抛出异常的方式定义资源

​SphU​​就是包含了try-catch风格的API,用这种方式,当资源发生了限流以后会抛出BlockException,这时候,我们就可以进行限流之后的逻辑操作

try (Entry hai = SphU.entry(资源名称)) {
// 被保护的代码逻辑
} catch (BlockException e) {
e.printStackTrace();
// 降级处理的代码逻辑
}

4.1.3 方式三:返回布尔类型的定义资源

​SphO ​​提供if-else风格的API,这种方式,当资源发生了限流之后会返回false,这个时候可以通过返回值,进行限流之后的逻辑操作,示例代码:

// 资源名可以使用任意类型的业务语义的字符串
if (SphO.entry("自定义的资源名")) {
// 务必保证finally会被执行 也就是catch代码块可以没有,但是finally代码快必须有
try {
/*
被保护的业务逻辑
*/
}finally {
SphO.exit();
}
}

注意:SphO.entry(xxx) 需要与SphO.exit()方法成对出现,匹配调用,位置正确。否则会导致调用链记录异常。抛出ErrorEntryFreeExecption异常

4.1.4 方式四:注解方式定义资源

标签:调用,SpringCloud,Alibaba,熔断,sentinel,限流,dashboard,Sentinel
From: https://blog.51cto.com/u_14957231/5725631

相关文章

  • SpringCloud Alibaba 【Sentinel-流量防护】
    ​​初始Sentinel来学习SpringCloudAlibaba的组件-熔断服务降级​​Sentinel简介​​Sentinel是面向分布式服务架构的高可用流量防护组件​​,主要以流量为切入点,从限流、......
  • SpringCloud学习 系列五、创建生产者和消费者验证微服务中心 Eureka的作用
    系列导航SpringCloud学习系列一、前言-为什么要学习微服务SpringCloud学习系列二、简介SpringCloud学习系列三、创建一个没有使用springCloud的服务提供者和消费......
  • SpringCloud学习 系列四、微服务中心 Eureka介绍及创建一个Eureka中心服务
    不得不先介绍一个概念1、CAP 定理(1)概念CAP定理指的是在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partitiontolerance(分区容错性),三者不可兼得。......
  • SpringCloudAlibaba整合Dubbo集群形式
    在文件bootstrap-cqa.propertiesspring.cloud.nacos.config.server-addr=172.16.99.96:8848,172.16.99.97:8848,172.16.99.98:8848spring.cloud.nacos.discovery.server-ad......
  • SpringCloudAlibaba之Sentinel实现流量实时监控
    1、什么是Sentinel? 2.Sentinel基本概念 资源,规则 3.Sentinel功能和设计理念 流量控制 流量控制有以下几个角度: 资源的调用关......
  • SpringCloudAlibaba之Nacos服务注册中心
    1、什么是Nacos? Nacos就是注册中心+配置中心的组合 Nacos=Eureka(替代Eureka做服务注册中心)+Config(替代Config做服务配置中心)2、去哪里学习Nacos? 官网:ht......
  • SpringCloud重试retry 20220927
    SpringCloud重试retry是一个很赞的功能,能够有效的处理单点故障的问题。主要功能是当请求一个服务的某个实例时,譬如你的User服务启动了2个,它们都在eureka里注册了,那么正常情......
  • SpringCloud微服务架构(二)
    nacos配置管理1.在nacos中添加配置信息2.在弹出表单中填写配置信息3.配置获取的步骤如下4.配置的步骤如下:1)引入Nacos的配置管理客户端依赖<!--nacos配置管理依......
  • SpringCloud/Alibaba学习+Nacos/Sentinel源码(五万字长文)
    SpringCloud学习笔记未经授权不得转载,创作不易,违者必究一、微服务架构1.1应用架构发展集中式架构网站流量很小,一个应用将所有功能部署优点:系统开发速度快;维护成本......
  • springcloud--负载均衡(ribbon)
    springcloud--负载均衡(ribbon)一、项目背景搭建好的springcloud项目,包含erueka模块(这里是单个,也可以多个)、服务提供者(多个)、消费者。创建多个服务提供者模块,用于集群(单......