【黑马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
<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:8090 http-method-specify: true # 开启请求方式前缀
4.Sentinel——请求限流
用户信息
5.Sentinel——线程隔离
6.Sentinel——Fallback
@Slf4jpublic class ItemClientFallback implements FallbackFactory<ItemClient> { @Override public ItemClient create(Throwable cause) { return new ItemClient() { @Override public List<ItemDTO> queryItemByIds(Collection<Long> ids) { log.error(\"远程调用ItemClient#queryItemByIds方法出现异常,参数:{}\", ids, cause); // 查询购物车允许失败,查询失败,返回空集合 return CollUtils.emptyList(); } @Override public void deductStock(List<OrderDetailDTO> items) { // 库存扣减业务需要触发事务回滚,查询失败,抛出异常 throw new BizIllegalException(cause); } }; }}
放置DefaultFeignConfig中进行声明
@Bean public 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后熔断结束后会发送一个请求看商品服务查询是否正常,如果不正常继续熔断,反之。。。。。。