微服务-sentinel

微服务-sentinel

部署

下载

wget https://github.com/alibaba/Sentinel/releases/download/1.7.0/sentinel-dashboard-1.7.0.jar

编写Dockerfile,将sentinel打成镜像

vi Dockerfile
FROM openjdk:8
WORKDIR /usr/local/docker/sentinel
ADD ./sentinel-dashboard-1.7.0.jar sentinel.jar
EXPOSE 8088
ENTRYPOINT ["java", "-jar", "sentinel.jar", "--server.port=8088"]

构建镜像

docker build -t sentinel .

编写docker-compose文件

version: '3.3'
services:
  sentinel:
    restart: always
    image: sentinel-dashboard-1.7.0
    container_name: sentinel
    ports:
      - 8088:8088

启动

docker-compose up -d

访问

http://ip:8088

账号密码默认是sentinel

项目整合

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Finchley.SR1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>0.2.1.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.5.5</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>0.9.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.2</version>
            <optional>true</optional>
        </dependency>
    </dependencies>

配置

spring:
    cloud:
      sentinel:
        transport:
          dashboard: 192.168.10.141:8089

配置类

使用的是Spring Boot/Cloud ,即没有导入前面的依赖,需要自己将切面纳入到Spring容器中去


@Configuration
public class SentinelConfig {
    @Bean
    public SentinelResourceAspect sentinelResourceAspect() {
        return new SentinelResourceAspect();
    }
}

@SentinelResource注解

源码

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface SentinelResource {
  	//资源名
    String value() default "";
	//entry 类型
    EntryType entryType() default EntryType.OUT;
	//指定异常处理函数名
    String blockHandler() default "";
    //如果异常处理函数不与目标方法在同一个类,则需要指定类,并且异常处理函数需要声明为static
    Class<?>[] blockHandlerClass() default {};

    //fallback函数名,默认为空
    String fallback() default "";

    //指定默认fallback函数
    String defaultFallback() default "";

    //同样,fallback函数需要和目标方法在同一个类,如果不再,则需要指定,并且对应的函数需要声明为static
    Class<?>[] fallbackClass() default {};

    //
    Class<? extends Throwable>[] exceptionsToTrace() default {Throwable.class};
    
    //指定排除的异常类型,不进入异常统计,也不会进入fallback函数处理,而是原样抛出。
    Class<? extends Throwable>[] exceptionsToIgnore() default {};
}

  • value:资源名称,必需项(不能为空)
  • entryType:entry 类型,可选项(默认为 EntryType.OUT)
  • blockHandler / blockHandlerClass: blockHandler对应处理 BlockException 的函数名称,可选项。blockHandler 函数访问范围需要是 public,返回类型需要与原方法相匹配,参数类型需要和原方法相匹配并且最后加一个额外的参数,类型为 BlockException。blockHandler 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 blockHandlerClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。
  • fallback:fallback 函数名称,可选项,用于在抛出异常的时候提供 fallback 处理逻辑。fallback 函数可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。fallback 函数签名和位置要求:返回值类型必须与原函数返回值类型一致;方法参数列表需要和原函数一致,或者可以额外多一个 Throwable 类型的参数用于接收对应的异常。fallback 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定
  • defaultFallback(since 1.6.0):默认的 fallback 函数名称,可选项,通常用于通用的 fallback 逻辑(即可以用于很多服务或方法)。默认 fallback 函数可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。若同时配置了 fallback 和 defaultFallback,则只有 fallback 会生效。defaultFallback 函数签名要求:返回值类型必须与原函数返回值类型一致;方法参数列表需要为空,或者可以额外多一个 Throwable 类型的参数用于接收对应的异常。defaultFallback 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 fallbackClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。
  • exceptionsToIgnore(since 1.6.0):用于指定哪些异常被排除掉,不会计入异常统计中,也不会进入 fallback 逻辑中,而是会原样抛出。

设置流控规则

image-20220713170011985

持久化配置到注册中心

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Finchley.SR1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>0.2.1.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.5.5</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>0.9.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.2</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
            <version>1.5.2</version>
        </dependency>
    </dependencies>

配置文件

spring.application.name=alibaba-sentinel
server.port=8001
 
# sentinel dashboard
spring.cloud.sentinel.transport.dashboard=127.0.0.1:28000
 
spring.cloud.sentinel.datasource.ds1.nacos.server-addr=192.168.72.151:28848
spring.cloud.sentinel.datasource.ds1.nacos.data-id=mz-sentinel
spring.cloud.sentinel.datasource.ds1.nacos.group-id=DEFAULT_GROUP
spring.cloud.sentinel.datasource.ds1.nacos.data-type=json
spring.cloud.sentinel.datasource.ds1.nacos.rule-type=flow

mz-sentinel

[
  {
   "resource": "/sentinel/h1",
   "limitApp": "default",
   "grade": 1,
   "count": 5,
   "strategy": 0,
   "controlBehavior": 0,
   "clusterMode": false
  },
  {
   "resource": "/sentinel/h2",
   "limitApp": "default",
   "grade": 1,
   "count": 5,
   "strategy": 0,
   "controlBehavior": 0,
   "clusterMode": false
  },
  {
   "resource": "sayHello",
   "limitApp": "default",
   "grade": 1,
   "count": 2,
   "strategy": 0,
   "controlBehavior": 0,
   "clusterMode": false
  }
]
nt": 5,
   "strategy": 0,
   "controlBehavior": 0,
   "clusterMode": false
  },
  {
   "resource": "sayHello",
   "limitApp": "default",
   "grade": 1,
   "count": 2,
   "strategy": 0,
   "controlBehavior": 0,
   "clusterMode": false
  }
]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值