Springcloud整合使用Sentinel

Sentinel是阿里开源的项目,提供了流量控制、熔断降级、系统负载保护等多个维度来保障服务之间的稳定性。

安装sentinel

sentinel安装地址

下载下来是jar直接以java -jar的方式运行即可,默认端口8080/账号密码都为sentinel。

指定配置运行

java -Dserver.port=8888 -Dcsp.sentinel.dashboard.server=localhost:8888 -Dproject.name=sentinel-dashboard -Dsentinel.dashboard.auth.username=sentinel -Dsentinel.dashboard.auth.password=123456 -jar sentinel-dashboard-1.7.2.jar

参数说明:

-Dserver.port=8888 # 指定控制台的端口为8888
 
-Dcsp.sentinel.dashboard.server=localhost:8888 # 指定要被哪个控制台监控(这里指定的是自己监控自己)
 
-Dproject.name=sentinel-dashboard # 指定实例名称(名称会在控制台左侧以菜单显示)
 
-Dsentinel.dashboard.auth.username=sentinel # 设置登录的帐号为:sentinel
 
-Dsentinel.dashboard.auth.password=123456 # 设置登录的密码为:123456

 启动之后访问

ip:port

Springcloud整合使用Sentinel_第1张图片

创建生产者

bootstrap.yml

server:
  port: 9526
spring:
  application:
    name: sentinel-produce
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        #group: DEFAULT_GROUP  分组
        namespace: b0310170-fbbf-4860-ac53-b991c7387363 #命名空间

 nacos-config上的配置

server:
  port: 9528
spring:
  application:
    name: sentinel-produce
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: b0310170-fbbf-4860-ac53-b991c7387363  

创建一个接口

@RestController
public class ProduceController {
    @GetMapping(value = "queryAll")
    public String queryAll(){
        return "查询成功!";
    }
}

消费者

引入jar

  
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-sentinel
        

bootstrap.yml

server:
  port: 9526
spring:
  application:
    name: sentinel-consumer
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        #group: DEFAULT_GROUP  分组
        namespace: b0310170-fbbf-4860-ac53-b991c7387363 #命名空间

nacos-config上的配置

server:
  port: 9527
spring:
  application:
    name: sentinel-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: b0310170-fbbf-4860-ac53-b991c7387363
    sentinel:
      transport:
          #连接sentinel的dashboard
        dashboard: 127.0.0.1:8080
        port: 8719 #注意这里的端口默认是8719  如果8719被占用会自动+1 无需当心
          #eager: true
#暴露的健康检查服务端点
management:
  endpoint:
    web:
      exposure:
        include: '*'

#对Feign的支持
feign:
  sentinel:
    enabled: true # 添加feign对sentinel的支持  

创建Feign以及设置fallback

@FeignClient(value = "sentinel-produce",fallback = ConsumerFallBackService.class)
public interface ConsumerService {
    @GetMapping(value = "queryAll")
     String queryAll();
}
@Component
public class ConsumerFallBackService implements ConsumerService {
    @Override
    public String queryAll() {
        return "程序异常!";
    }
}

注意程序异常只会走fallback, @SentinelResource只会在sentinel异常时使用

@RestController
public class ConsumerController {
   @Autowired
   private  ConsumerService consumerService;

    @GetMapping(value = "consumerQuery")
    @SentinelResource(value = "consumerQuery",blockHandler = "blockQuery")
    public String consumerQuery(){
       return consumerService.queryAll();
    }

    public String blockQuery(BlockException blockException){
        return "Sentinel异常!";
    }

}

运行调用

Springcloud整合使用Sentinel_第2张图片

 模拟生产者程序异常

@RestController
public class ProduceController {
    @GetMapping(value = "queryAll")
    public String queryAll(){
        int a=0/1;
        return "查询成功!";
    }
}

Springcloud整合使用Sentinel_第3张图片

 模拟sentinel异常,在流控规则处设置单机阈值为1代表每秒仅能请求一次

Springcloud整合使用Sentinel_第4张图片

 连续单击请求

Springcloud整合使用Sentinel_第5张图片

你可能感兴趣的:(spring,cloud,spring,boot,java)