sentinel分布式系统的流量防卫兵

Sentinel 分为两个部分 :
       核心库( Java 客户端)不依赖任何框架 /库,能够运行于所有 Java 运行时环境,同时对 Dubbo/Spring Cloud 等框架也有较好的支持。[客端户]
       控制台( Dashboard )基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。 [服务端 ]
官方文档 : https://github.com/alibaba/Sentinel/wiki/%E6%8E%A7%E5%88%B6%E5%8F%B0
1.获取控制台
可以从 release 页面 下载最新版本的控制台 jar 包。
2.启动控制台( 注意 :启动 Sentinel 控制台需要 JDK 版本为 1.8 及以上版本
使用如下命令启动控制台:
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.7.2.jar
3.项目环境
shop - product : 商品服务,提供了 /product/findById/{id}
shop - order - rest : 订单服务,基于 Ribbon 通过 RestTemplate 调用商品服务。
shop - order - feign :订单服务,基于 Feign 通过声明式服务调用商品服务。
4.客户端接入控制台
1 子工程需要添加如下依赖 :
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

配置文件

shop - order - rest application.yml
3   初始化客户并问

 

 5.定义资源

资源 Sentinel 中的核心概念之一。我们说的资源,可以是任何东西,服务,服务里的方法,甚至是一段代码。最常用的资源是我们代码中的Java 方法。 Sentinel 提供了 @SentinelResource 注解用于定义资源,并提供了 AspectJ 的 扩展用于自动定义资源、处理 BlockException 等。
package com.yjq.service.impl;

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.yjq.entry.Product;
import com.yjq.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class ProductServiceImpl_blank implements ProductService {

    @Autowired
    private RestTemplate restTemplate;
    @Override
    //定义资源
    //value:定义资源名称
    //fallback:异常兜底方案必须 与该方法的返回值一致, 参数必须一致。额外多出一个异常对象
    //blockHandLer:熔断兜底方案

    @SentinelResource(value = "findByid", fallback = "fallbackMethod", blockHandler = "blockHanderMethod")
    public Product findByid(Integer pid) {
        if (pid==1){
            throw new RuntimeException("查询主键id为1的导致异常");
        }
        return restTemplate.getForObject("http://shop-product/product/findById/"+pid,Product.class);
    }

    public Product fallbackMethod(Integer pid,Throwable e){
        Product product=new Product();
        product.setPid(pid);
        product.setPname("服务器出现异常时的兜底方法");
        return product;
    }

    public Product blockHanderMethod(Integer pid, BlockException e){
        Product product=new Product();
        product.setPid(pid);
        product.setPname("服务器出现熔断时的兜底方法");
        return product;
    }
}
6.定义规则
Sentinel的所有规则都可以在内存态中动态地查询及修改,修改之后立即生效。同时 Sentinel 也提供相关 API,用来定制自己的规则策略。 Sentinel支持以下几种规则 :流量控制规则、熔断降级规则、系统保护规则、来源访问控制规则和热点参数规则。
流量控制规则:
选择簇点链路找到定义好的资源 selectProductById 并点击对应的规则按钮进行设置。

 

熔断降级规则
修改 sshop-service-rest 项目中的核心代码,模拟服务出错。

 

 

 7.动态规则扩展

 

 

 

 

创建该类:

 

 

最后进行测试:

 

8.openfeign的支持

1 添加依赖

<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
2 开启 Sentinel

 

3 创建一个 Feign 接口的实现类

 

4 在 Feign 上使用兜底类

 

 最后测试:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值