微服务之服务保护

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);
}

服务熔断

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

相关推荐
机灵猫1 天前
守卫系统的最后一道防线:深入 Sentinel 限流降级与熔断机制(对比 Hystrix)
java·hystrix·sentinel
weixin_439706251 天前
spring boot+nacos+gateway+sentinel的简单例子
spring boot·gateway·sentinel
墨白曦煜3 天前
微服务容错设计:Sentinel 全局异常处理与 Feign 降级策略的边界权衡
微服务·架构·sentinel
没有bug.的程序员3 天前
Spring Cloud Gateway 架构与执行流程:从原理到性能优化的深度探索
微服务·云原生·eureka·性能优化·架构·sentinel·服务发现
杜子不疼.3 天前
Spring Cloud 微服务实战:Nacos+Sentinel+Gateway 核心组件详解
spring cloud·微服务·sentinel
enjoy编程5 天前
Spring Boot 4 如何使用Sentinel进行限流-II【基于Sentinel Spring MVC Adapter实现】
spring boot·spring·sentinel·服务限流·webmvc·servlet 6.x
没有bug.的程序员5 天前
Sentinel 流控原理深度解析:构建高可用微服务的底层架构
java·算法·微服务·云原生·架构·sentinel·负载均衡
代码的奴隶(艾伦·耶格尔)6 天前
Sentinel限流熔断
java·前端·sentinel
东东的脑洞6 天前
【面试突击】Redis 哨兵(Sentinel)完全指南:从原理到实战
redis·面试·sentinel
enjoy编程6 天前
Spring Boot 4 如何使用Sentinel进行限流?
spring boot·sentinel·限流·熔断降级·流量控制·服务限流·系统负载保护