一、下载
sentinel的jar包
https://github.com/alibaba/Sentinel/releases/download/1.8.3/sentinel-dashboard-1.8.3.jar
或者自行定制版本
https://github.com/alibaba/Sentinel/releases?page=1
测试结构如下
二、代码
<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>
package com.cxy.config;
import com.alibaba.csp.sentinel.annotation.aspectj.SentinelResourceAspect;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SentinelConfig {
@Bean
public SentinelResourceAspect sentinelResourceAspect() {
return new SentinelResourceAspect();
}
}
package com.cxy.controller;
import com.cxy.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("sentinel")
public class TestSentinelController {
@Autowired
private HelloService helloService;
@GetMapping("/h1")
public String hello(@RequestParam("name") String name) {
return helloService.sayHello(name);
}
@GetMapping("/h2")
public String circuitBreaker(@RequestParam("name") String name) {
return helloService.circuitBreaker(name);
}
}
package com.cxy.service;
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import org.springframework.stereotype.Service;
@Service
public class HelloService {
/**
* 限流降级
*
* @return
*/
@SentinelResource(value = "sayHello", blockHandler = "sayHelloExceptionHandler")
public String sayHello(String name) {
return "hello," + name;
}
/**
* 熔断降级
*
* @return
*/
@SentinelResource(value = "circuitBreaker", fallback = "circuitBreakerFallback", blockHandler = "sayHelloExceptionHandler")
public String circuitBreaker(String name) {
if ("zhangsan".equals(name)) {
return "hello," + name;
}
throw new RuntimeException("发生异常");
}
public String circuitBreakerFallback(String name) {
return "服务异常,熔断降级, 请稍后重试!";
}
public String sayHelloExceptionHandler(String name, BlockException ex) {
return "访问过快,限流降级, 请稍后重试!";
}
}
package com.cxy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SentinelApplication {
public static void main(String[] args) {
SpringApplication.run(SentinelApplication.class, args);
}
}
spring.application.name=alibaba-sentinel
server.port=8001
# sentinel dashboard
spring.cloud.sentinel.transport.dashboard=127.0.0.1:28000
三、运行sentinel
java -jar sentinel.jar --server.port=28000(你的目标端口)
访问localhost:28000
账号密码默认sentinel
四、启动后台
五、设置sentinel规则
六、测试
多次访问如下地址
http://localhost:8001/sentinel/h1?name=dong
多次访问如下地址
http://localhost:8001/sentinel/h2?name=zhangsan1
其余sentinel功能未研究,自行研究
well done!