【黑马SpringCloud微服务开发与实战】(五)微服务保护
1.雪崩问题——原因分析
2.雪崩问题——解决方案
3.Sentinel——快速入门
本地启动:从资料里面获取jar包并且把版本后缀去掉和命令的名称一致
java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
http://localhost:8090 访问sentinel
cart服务整合sentinel
<!--sentinel-->
<dependency><groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
spring:cloud: sentinel:transport:dashboard: localhost:8090
spring:cloud:sentinel:transport:dashboard: localhost:8090http-method-specify: true # 开启请求方式前缀
4.Sentinel——请求限流
用户信息
5.Sentinel——线程隔离
6.Sentinel——Fallback
@Slf4j
public class ItemClientFallback implements FallbackFactory<ItemClient> {@Overridepublic ItemClient create(Throwable cause) {return new ItemClient() {@Overridepublic List<ItemDTO> queryItemByIds(Collection<Long> ids) {log.error("远程调用ItemClient#queryItemByIds方法出现异常,参数:{}", ids, cause);// 查询购物车允许失败,查询失败,返回空集合return CollUtils.emptyList();}@Overridepublic void deductStock(List<OrderDetailDTO> items) {// 库存扣减业务需要触发事务回滚,查询失败,抛出异常throw new BizIllegalException(cause);}};}
}
放置DefaultFeignConfig中进行声明
@Beanpublic ItemClientFallback itemClientFallback(){return new ItemClientFallback();}
@FeignClient(value = "item-service",configuration = DefaultFeignConfig.class,fallbackFactory = ItemClientFallback.class)
public interface ItemClient {@GetMapping("/items")List<ItemDTO> queryItemByIds(@RequestParam("ids") Collection<Long> ids);@PutMapping("/items/stock/deduct")void deductStock(@RequestBody List<OrderDetailDTO> items);
}
feign:okhttp:enabled: true # 开启OKHttp功能sentinel:enabled: true
 |
7.Sentinel——服务熔断
20s后熔断结束后会发送一个请求看商品服务查询是否正常,如果不正常继续熔断,反之。。。。。。