spring cloud Alibaba --sentinel组件的使用
sentinel组件
对于sentinel的前置知识这里就不多说了:
直接上代码:
Release v1.8.1 · alibaba/Sentinel · GitHub 下载地址
springcloud Alibaba环境下创建soringboot的项目:
POM:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
application.yml
server:
port: 8089
spring:
application:
name: cloudorder
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
sentinel:
# eager: true
transport:
port: 8719
dashboard: localhost:8080
management:
endpoints:
web:
exposure:
include: "*"
feign:
sentinel:
enabled: true
主启动
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class OrderApplication8088 {
public static void main(String[] args) {
SpringApplication.run(OrderApplication8088.class,args);
}
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
写一个controller接口就可以了:
@RequestMapping("/order")
public String test1(@RequestParam(name = "id")String id){
return UUID.randomUUID().toString()+ " id :"+ id;
}
先启动nacos注册中心,再启动sentinel的检测服务,本次用的是1.8.1的版本:
java -jar sentinel-dashboard-1.8.1.jar 就可以启动服务了
再启动我们的springboot服务
访问 localhost:8080就是sentinel的服务界面了 可以在上面配置服务的限流和降级的配置,以及热点key的配置
@RequestMapping("/getFeign")
@SentinelResource(value = "getFeign",blockHandler = "demotionGetFeign",fallback = "deGetFeign")
public String getFeign(@RequestParam(name = "id",required = false,defaultValue = "5")String id) {
// int i = 10/0;
return "eeee eee "+proFeign.provide(id);
}
public String demotionGetFeign(String id, BlockException ex){
return id+" 服务降级了啊。。。o(╥﹏╥)o"+ex;
}
public String deGetFeign(String id){
return "限流了啊。。。。o(╥﹏╥)o";
}
@SentinelResource(value = "getFeign",blockHandler = "demotionGetFeign",fallback = "deGetFeign")
说一下这个注解就是配置接口出现异常 或者限流后应该怎么处理:
blockHandler 这个属性是在sentinel控制台配置的规则出现问题的时候会作出相应的处理方案
fallback 这个是兜底的方法了 代码出现异常 或者其他问题就会走这个方法了
需要注意的是
blockHandler 的降级方法的返回值和参数要和原来的方法一样,同时要加上
BlockException ex属性,代表出现异常后的信息
至于sentinel界面的配置就不多说了 可以看看官网写的
sentinel的持久化配置:
步骤:
- 添加pom
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
- 配置yml
spring:
application:
name: sentinel-service
cloud:
nacos:
discovery: #nacos服务注册中心地址
server-addr: www.cjlly.com:8848
sentinel:
transport:
dashboard: 127.0.0.1:8080
port: 8719
datasource:
ds1:
nacos:
server-addr: www.cjlly.com:8848
dataId: sentinel-service
groupId: DEFAULT_GROUP
data-type: json
rule_type: flow
- 登陆nacos,新建配置规则sentinel-service
[
{
"resource": "/findById",
"limitApp":"default",
"grade":1,
"count":1,
"strategy":0,
"controlBehavior":0,
"clusterMode":false
}
]
naocs配置解读:
resource:资源名称
limitApp:来源应用
grade:阀值类型,0---线程数,1---QPS
count:单机阀值
strategy:流控模式,0---直接,1---关联,2---链路
controlBehavior:流控效果,0---快速失败,1---warmUp,2---排队等待
clusterMode:是否集群
需要注意地方:
- 此时如果是Nacos集群,每个节点务必要配置到同一个数据库上。并且保证每个
节点都可用。如果有的节点宕掉了可能会导致配置持久化失败。 - 部署在nacos上的配置文件的名字并没有太多要求,只需要跟微服务项目中yml文件中配置的dataId一致即可。
spring cloud Alibaba --sentinel组件的使用的更多相关文章
- Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵基础实战
Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵基础实战 Springboot: 2.1.8.RELEASE SpringCloud: Greenwich.SR2 ...
- Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵进阶实战
Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵进阶实战 在阅读本文前,建议先阅读<Spring Cloud Alibaba | Sentinel:分布式系 ...
- 0.9.0.RELEASE版本的spring cloud alibaba sentinel实例
sentinel即哨兵,相比hystrix断路器而言,它的功能更丰富.hystrix仅支持熔断,当服务消费方调用提供方发现异常后,进入熔断:sentinel不仅支持异常熔断,也支持响应超时熔断,另外还 ...
- Spring Cloud Alibaba | Sentinel: 分布式系统的流量防卫兵初探
目录 Spring Cloud Alibaba | Sentinel: 分布式系统的流量防卫兵初探 1. Sentinel 是什么? 2. Sentinel 的特征: 3. Sentinel 的开源生 ...
- Spring Cloud Alibaba | Sentinel: 服务限流基础篇
目录 Spring Cloud Alibaba | Sentinel: 服务限流基础篇 1. 简介 2. 定义资源 2.1 主流框架的默认适配 2.2 抛出异常的方式定义资源 2.3 返回布尔值方式定 ...
- Spring Cloud Alibaba | Sentinel: 服务限流高级篇
目录 Spring Cloud Alibaba | Sentinel: 服务限流高级篇 1. 熔断降级 1.1 降级策略 2. 热点参数限流 2.1 项目依赖 2.2 热点参数规则 3. 系统自适应限 ...
- Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵动态限流规则
Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵动态限流规则 前面几篇文章较为详细的介绍了Sentinel的使用姿势,还没看过的小伙伴可以访问以下链接查看: &l ...
- Spring Cloud Alibaba Sentinel对Feign的支持
Spring Cloud Alibaba Sentinel 除了对 RestTemplate 做了支持,同样对于 Feign 也做了支持,如果我们要从 Hystrix 切换到 Sentinel 是非常 ...
- Spring Cloud Alibaba Sentinel对RestTemplate的支持
Spring Cloud Alibaba Sentinel 支持对 RestTemplate 的服务调用使用 Sentinel 进行保护,在构造 RestTemplate bean的时候需要加上 @S ...
随机推荐
- 前端框架VUE——安装及初始化
本篇文章适合,想要学习 vue,但对 vue 又没有接触过的同学阅读,是非常基础的内容.告诉大家使用 vue 时的安装方式,及如何创建实例,展示内容. 一.安装方式 vue 是一种前端框架,所以使用前 ...
- 【第八篇】- Git 查看提交历史之Spring Cloud直播商城 b2b2c电子商务技术总结
Git 查看提交历史 Git 提交历史一般常用两个命令: git log 在使用 Git 提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,我们可以使用 git log 命令查看. 针对 ...
- Java基础系列(8)- 数据类型
数据类型 强类型语言 要求变量的使用合乎规定,所有的变量都必须先定义才能使用.Java是强类型语言. 弱类型语言 变量定义比较随意,比如"12"+3,可以是int型123,也可以是 ...
- Nginx系列(9)- Nginx常用命令
Linux # 命令需要在Nginx的sbin目录下执行 cd /usr/local/nginx/sbin/ ./nginx #启动./nginx -s stop #停止 ./nginx -s qui ...
- Selenium多浏览器处理 (Chrome/Firefox/IE)
测试用例文件:test_selenium/test_hogwarts.py 使用pytest框架 定义一个变量,通过外部传入变量,确定使用哪个浏览器 browser = os.getenv(" ...
- windows2012安装django
第一步:下载python3.6.8或者到(https://www.python.org/downloads/release/python-368/)官网下载(Windows x86-64 execut ...
- whistle抓包-数据包分析
额,这篇忘了是来自哪位作者的了. whistle:1.14.6 这里以抓取浏览器数据包为例,分析抓取的数据. Method:Connect,对应Host:Tunnel to意思是因为网络环境受限,客户 ...
- farOs 介绍
nGame nGame 一款文字游戏服务端框架;用于快速构建:自由探索.武侠.修真.模拟,回合制,剧本杀.动态语言小说.等服务器 如果你有期望实现的功能请加Q群 ngame计划 完善框架功能 farO ...
- JAVA 150道笔试题知识点整理
JAVA 笔试题 整理了几天才整理的题目,都是在笔试或者面试碰到的,好好理解消化下,对你会有帮助,祝你找工作顺利,收到满意的 offer . 1.Java 基础知识 1.1 Java SE 语法 &a ...
- 超简洁,玩转springboot 之springboot自定义start工程
springboot 的start 建一个父工程 不需要其他目录结构,需要注意的是把type的类型改为POM 这样就没有工程的目录结构 因为父工程不需要 给父工程的pom添加依赖 <depend ...