对于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: 8089spring: application: name: cloudorder cloud: nacos: discovery: server-addr: 127.0.0.1:8848 sentinel: # eager: true transport: port: 8719 dashboard: localhost:8080management: 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@EnableFeignClientspublic 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配置解读:
需要注意地方:
- 此时如果是Nacos集群,每个节点务必要配置到同一个数据库上。并且保证每个
节点都可用。如果有的节点宕掉了可能会导致配置持久化失败。 - 部署在nacos上的配置文件的名字并没有太多要求,只需要跟微服务项目中yml文件中配置的dataId一致即可。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/63063.html