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
创建生产者
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异常!";
}
}
运行调用
模拟生产者程序异常
@RestController
public class ProduceController {
@GetMapping(value = "queryAll")
public String queryAll(){
int a=0/1;
return "查询成功!";
}
}
模拟sentinel异常,在流控规则处设置单机阈值为1代表每秒仅能请求一次
连续单击请求