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一致即可。





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM