Advertisement

限流中间件-sentinel-阿里开源限流中间件

阅读量:

一、引言:

演示框架:SpringBoot结合Sentinel

二、演示示例:

pom.xml文件内容如下:

复制代码
 <?xml version="1.0" encoding="UTF-8"?>

    
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    
     <modelVersion>4.0.0</modelVersion>
    
     <groupId>com.jason.flow.contorl</groupId>
    
     <artifactId>flowcontrol-demo</artifactId>
    
     <version>0.0.1-SNAPSHOT</version>
    
     <name>flowcontrol-demo</name>
    
     <description>Demo project for Spring Boot</description>
    
  
    
     <properties>
    
     <java.version>1.8</java.version>
    
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    
     <spring-boot.version>2.3.1.BUILD-SNAPSHOT</spring-boot.version>
    
     <spring-cloud-alibaba.version>2.2.2.RELEASE</spring-cloud-alibaba.version>
    
     </properties>
    
  
    
     <dependencies>
    
     <dependency>
    
         <groupId>org.springframework.boot</groupId>
    
         <artifactId>spring-boot-starter-web</artifactId>
    
     </dependency>
    
     <dependency>
    
         <groupId>com.alibaba.cloud</groupId>
    
         <artifactId>spring-cloud-alibaba-sentinel-datasource</artifactId>
    
     </dependency>
    
     <dependency>
    
         <groupId>com.alibaba.cloud</groupId>
    
         <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    
     </dependency>
    
     <dependency>
    
         <groupId>com.alibaba.csp</groupId>
    
         <artifactId>sentinel-reactor-adapter</artifactId>
    
     </dependency>
    
     <dependency>
    
         <groupId>com.google.guava</groupId>
    
         <artifactId>guava</artifactId>
    
         <version>18.0</version>
    
     </dependency>
    
  
    
     <dependency>
    
         <groupId>org.springframework.boot</groupId>
    
         <artifactId>spring-boot-starter-test</artifactId>
    
         <scope>test</scope>
    
         <exclusions>
    
             <exclusion>
    
                 <groupId>org.junit.vintage</groupId>
    
                 <artifactId>junit-vintage-engine</artifactId>
    
             </exclusion>
    
         </exclusions>
    
     </dependency>
    
     </dependencies>
    
  
    
     <dependencyManagement>
    
     <dependencies>
    
         <dependency>
    
             <groupId>com.alibaba.cloud</groupId>
    
             <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    
             <version>${spring-cloud-alibaba.version}</version>
    
             <type>pom</type>
    
             <scope>import</scope>
    
         </dependency>
    
         <dependency>
    
             <groupId>org.springframework.boot</groupId>
    
             <artifactId>spring-boot-dependencies</artifactId>
    
             <version>${spring-boot.version}</version>
    
             <type>pom</type>
    
             <scope>import</scope>
    
         </dependency>
    
     </dependencies>
    
     </dependencyManagement>
    
  
    
     <build>
    
     <plugins>
    
         <plugin>
    
             <groupId>org.apache.maven.plugins</groupId>
    
             <artifactId>maven-compiler-plugin</artifactId>
    
             <version>3.8.1</version>
    
             <configuration>
    
                 <source>1.8</source>
    
                 <target>1.8</target>
    
                 <encoding>UTF-8</encoding>
    
             </configuration>
    
         </plugin>
    
         <plugin>
    
             <groupId>org.springframework.boot</groupId>
    
             <artifactId>spring-boot-maven-plugin</artifactId>
    
             <version>2.3.1.BUILD-SNAPSHOT</version>
    
             <configuration>
    
                 <mainClass>com.jason.flow.contorl.flowcontroldemo.FlowcontrolDemoApplication</mainClass>
    
             </configuration>
    
             <executions>
    
                 <execution>
    
                     <id>repackage</id>
    
                     <goals>
    
                         <goal>repackage</goal>
    
                     </goals>
    
                 </execution>
    
             </executions>
    
         </plugin>
    
     </plugins>
    
     </build>
    
  
    
     <repositories>
    
     <repository>
    
         <id>spring-milestones</id>
    
         <name>Spring Milestones</name>
    
         <url>https://repo.spring.io/milestone</url>
    
     </repository>
    
     <repository>
    
         <id>spring-snapshots</id>
    
         <name>Spring Snapshots</name>
    
         <url>https://repo.spring.io/snapshot</url>
    
         <snapshots>
    
             <enabled>true</enabled>
    
         </snapshots>
    
     </repository>
    
     </repositories>
    
     <pluginRepositories>
    
     <pluginRepository>
    
         <id>spring-milestones</id>
    
         <name>Spring Milestones</name>
    
         <url>https://repo.spring.io/milestone</url>
    
     </pluginRepository>
    
     <pluginRepository>
    
         <id>spring-snapshots</id>
    
         <name>Spring Snapshots</name>
    
         <url>https://repo.spring.io/snapshot</url>
    
         <snapshots>
    
             <enabled>true</enabled>
    
         </snapshots>
    
     </pluginRepository>
    
     </pluginRepositories>
    
  
    
 </project>
    
    
    
    
复制代码

doTest代表需进行防护的处理方式,当blockHandler与fallback同时配置时,系统将优先采用blockHandler所设定的限流策略。

需注意以下事项:

1)doTest的命名必须与所配置的限流方法名称及限流规则(FlowRule.setResource("doTest"))相匹配。

2)用于处理限流的blockHandler方法,其返回类型及参数类型应与被保护的方法保持一致,且在参数列表中需额外包含BlockException类型的参数。

复制代码
 package com.jason.flow.contorl.flowcontroldemo.service;

    
 import com.alibaba.csp.sentinel.annotation.SentinelResource;
    
 import com.alibaba.csp.sentinel.slots.block.BlockException;
    
 import org.springframework.stereotype.Service;
    
 /** * @program: flowcontrol-demo
    
  * @description
    
  * @author: 大龄程序猿
    
  * @create: 2020-09-21 23:03
    
  **/
    
 @Service
    
 public class TestService {
    
  
    
     @SentinelResource(value="doTest" , fallback="fallback",blockHandler = "blockHandler")
    
     public String doTest(String name)
    
     {
    
     return "hello"+name;
    
     }
    
  
    
     public String  blockHandler(String name, BlockException  e)
    
     {
    
     return  "被限流";
    
     }
    
  
    
     public String fallback(String name)
    
     {
    
     return "被降级了";
    
     }
    
 }
    
    
    
    

控制层代码:

复制代码
 import com.jason.flow.contorl.flowcontroldemo.service.TestService;

    
 import org.springframework.beans.factory.annotation.Autowired;
    
 import org.springframework.web.bind.annotation.GetMapping;
    
 import org.springframework.web.bind.annotation.PathVariable;
    
 import org.springframework.web.bind.annotation.RestController;
    
  
    
 /** * @program: flowcontrol-demo
    
  * @description
    
  * @author: 大龄程序猿
    
  * @create: 2020-09-21 23:13
    
  **/
    
 @RestController
    
 public class TestControl {
    
  
    
     @Autowired
    
     TestService  testService;
    
  
    
     @GetMapping("/hello/{name}")
    
     public String sayHello(@PathVariable String name)
    
     {
    
     return testService.doTest(name);
    
     }
    
 }
    
    
    
    

全部评论 (0)

还没有任何评论哟~