当前位置: 首页 > article >正文

微服务之服务保护

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逻辑

@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

@Bean
public ItemClientFallbackFactory createItemClientFallbackFactory(){
   return new ItemClientFallbackFactory();
}

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

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

服务熔断

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


http://www.kler.cn/a/318667.html

相关文章:

  • STM32问题集
  • Ruby编程语言全景解析:从基础到进阶
  • 优化时钟网络之时钟抖动
  • 文件输入输出——NOI
  • Scala入门基础(17.1)Set集习题
  • Springboot集成syslog+logstash收集日志到ES
  • git checkout -b dev origin/dev
  • golang cmd.exec 执行命令后报错 No such file or directory
  • 最优化理论与自动驾驶(二-补充):求解算法(梯度下降法、牛顿法、高斯牛顿法以及LM法,C++代码)
  • Java-数据结构-排序(三) |ू・ω・` )
  • 【网络安全】密码学的新进展
  • Nginx 如何开启压缩
  • 伊犁云计算22-1 rhel8 dhcp 配置
  • YOLOv10改进,YOLOv10主干网络替换为VanillaNet( CVPR 2023 华为提出的全新轻量化架构),大幅度涨点
  • 操作系统知识3
  • 华为全联接大会HUAWEI Connect 2024印象(一):OpenEuler
  • uniapp沉浸式导航栏+自定义导航栏组件
  • 深入理解端口、端口号及FTP的基本工作原理
  • CREO教程——2 绘制标准图纸
  • python/requests库的使用/爬虫基础工具/
  • 最新版C/C++通过CLion2024进行Linux远程开发保姆级教学
  • 【Docker】基于docker compose部署artifactory-cpp-ce服务
  • 【车联网安全】车端知识调研
  • 产品经理面试整理-软件产品经理的常用工具
  • SpringBoot框架在文档管理中的创新应用
  • 系统架构笔记-3-信息系统基础知识