微服务之服务保护

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:8090
      http-method-specify: true # 开启请求方式前缀

fallback

一般簇点链路都是springmvc的接口,如果要基于openfeign的远程调用也加入簇点链路,就需要一个配置

复制代码
feign:
  sentinel:
    enabled: true

FeignClient的Fallback有两种配置方式:

  • 方式一:FallbackClass,无法对远程调用的异常做处理
  • 方式二:FallbackFactory,可以对远程调用的异常做处理,通常都会选择这种

步骤一:自定义类,实现FallbackFactory,编写对某个FeignClient的fallback逻辑

java 复制代码
@Slf4j
public class ItemClientFallbackFactory implements FallbackFactory<ItemClient> {
    @Override
    public ItemClient create(Throwable cause) {
        // 创建ItemClient接口实现类,实现其中的方法,编写失败降级的处理逻辑
        return new ItemClient() {
            @Override
            public List<ItemDTO> getItemByIds(Collection<Long> ids) {
                log.error("查询商品信息失败,cause: {}", cause.getMessage());
                return CollUtils.emptyList();
            }

            @Override
            public void deductStock(List<OrderDetailDTO> items) {
                throw new RuntimeException("扣减商品库存失败");
            }
        };
    }
}

步骤二:在配置类中把这个类注册为一个bean

java 复制代码
@Bean
public ItemClientFallbackFactory createItemClientFallbackFactory(){
   return new ItemClientFallbackFactory();
}

步骤三:在userClient接口中使用ItemClientFallbackFactory

java 复制代码
@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);
}

服务熔断

熔断降级是解决雪崩问题的重要手段。思路是由断路器统计服务调用的异常比例,慢请求比例,如果超出阈值则会熔断该服务。即拦截访问该服务的一切请求;当服务恢复时,断路器会放行访问该服务的请求。

相关推荐
okok__TXF9 小时前
Sentinel入门篇【流量治理】
java·sentinel
述雾学java3 天前
Spring Cloud Feign 整合 Sentinel 实现服务降级与熔断保护
java·spring cloud·sentinel
虚!!!看代码3 天前
【Sentinel学习】
网络·sentinel
Fireworkitte3 天前
Redis 源码 tar 包安装 Redis 哨兵模式(Sentinel)
数据库·redis·sentinel
何苏三月3 天前
SpringCloud系列 - Sentinel 服务保护(四)
spring·spring cloud·sentinel
夢想执行家4 天前
Docker拉取bladex 、 sentinel-dashboard
docker·eureka·sentinel
sevevty-seven15 天前
Sentinel
linux·服务器·sentinel
秋恬意15 天前
什么是Sentinel?以及优缺点
sentinel
liang899915 天前
Sentinel(一):Sentinel 介绍和安装
sentinel
述雾学java16 天前
Sentinel 服务限流机制
sentinel