微服务之服务保护

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

服务熔断

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

相关推荐
超梦dasgg7 小时前
Sentinel生产环境实战全解
java·微服务·sentinel
Ting-yu9 小时前
SpringCloud快速入门(11)---- Sentinel(异常处理)
java·spring boot·后端·spring·spring cloud·sentinel
Ting-yu9 小时前
SpringCloud快速入门(10)---- Sentinel(应用场景&控制台安装)
spring·spring cloud·sentinel
heimeiyingwang2 天前
【架构实战】服务熔断与限流Sentinel:高可用服务的守护神
架构·sentinel
庞轩px3 天前
第八篇:Spring与微服务——从SpringBoot到SpringCloud的演进
spring boot·spring·微服务·nacos·gateway·sentinel
卷毛的技术笔记6 天前
双十一零点扛过10倍流量洪峰:Sentinel与Redis+Lua的分布式限流深度避坑指南
java·redis·分布式·后端·系统架构·sentinel·lua
chushiyunen7 天前
sentinel限流工具使用
sentinel
Irissgwe7 天前
redis之哨兵(Sentinel)
数据库·redis·sentinel·主从复制·哨兵
phltxy9 天前
微服务高可用实战:Sentinel 熔断与限流从入门到精通
微服务·架构·sentinel
空中海16 天前
第六篇:可靠性篇 — Sentinel 熔断限流与 Seata 分布式事务
分布式·sentinel