Sentinel引入Java项目中
一:安装Sentinel
官网地址:https://github.com/alibaba/Sentinel/releases
二:安装好后在sentinel-dashboard.jar所在目录运行终端
三:运行命令,端口自己指定
java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
四:然后访问,localhost:8090 账号密码刚开始默认是sentinel
五:项目中引入依赖
<!--sentinel-->
<dependency><groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
六:配置application.yaml
spring:cloud:sentinel:transport:dashboard: localhost:8090http-method-specify: true # 开启请求方式前缀
fallback
一般簇点链路都是springmvc的接口,如果要基于openfeign的远程调用也加入簇点链路,就需要一个配置
feign:sentinel:enabled: true
FeignClient的Fallback有两种配置方式:
- 方式一:FallbackClass,无法对远程调用的异常做处理
- 方式二:FallbackFactory,可以对远程调用的异常做处理,通常都会选择这种
步骤一:自定义类,实现FallbackFactory,编写对某个FeignClient的fallback逻辑
@Slf4j
public class ItemClientFallbackFactory implements FallbackFactory<ItemClient> {@Overridepublic ItemClient create(Throwable cause) {// 创建ItemClient接口实现类,实现其中的方法,编写失败降级的处理逻辑return new ItemClient() {@Overridepublic List<ItemDTO> getItemByIds(Collection<Long> ids) {log.error("查询商品信息失败,cause: {}", cause.getMessage());return CollUtils.emptyList();}@Overridepublic void deductStock(List<OrderDetailDTO> items) {throw new RuntimeException("扣减商品库存失败");}};}
}
步骤二:在配置类中把这个类注册为一个bean
@Bean
public ItemClientFallbackFactory createItemClientFallbackFactory(){return new ItemClientFallbackFactory();
}
步骤三:在userClient接口中使用ItemClientFallbackFactory
@FeignClient(value = "item-service",fallbackFactory = ItemClientFallbackFactory.class)
public interface ItemClient {@GetMapping("/items")List<ItemDTO> getItemByIds(@RequestParam("ids") Collection<Long> ids);@PutMapping("/items/stock/deduct")void deductStock(@RequestBody List<OrderDetailDTO> items);
}
服务熔断
熔断降级是解决雪崩问题的重要手段。思路是由断路器统计服务调用的异常比例,慢请求比例,如果超出阈值则会熔断该服务。即拦截访问该服务的一切请求;当服务恢复时,断路器会放行访问该服务的请求。