1.导入依赖
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<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>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.编写yml文件
server:
port: 8401
spring:
application:
name: alibaba-sentinel-server
cloud:
nacos:
discovery:
server-addr: localhost:8848
sentinel:
transport:
port: 8719
dashboard: localhost:8080
management:
endpoints:
web:
exposure:
include: "*"
3.编写controller业务,进行测试
@RestController
@RequestMapping("/sentinel")
public class SentinelController {
@RequestMapping("/test1")
public String getTest1(){
return "test1 测试";
}
@RequestMapping("/test2")
public String getTest2(){
return "test2 测试";
}
}
4.添加流控规则(sentinel默认懒加载模式,访问过一次后才会出现)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5de6bf83e041c37de35039284ae0fbf0.png)
5.sentinel进行流控的异常自定义提示(定义blockHander进行处理兜底)
@RequestMapping("/hotkey")
@SentinelResource(value = "hotkey",blockHandler = "deal_key")
public String getHotkey(@RequestParam(value = "p",required = false) String pstring,
@RequestParam(value = "q",required = false) String qstring ){
return "成功!!!!!"+pstring;
}
public String deal_key(String pstring , String qstring , BlockException e){
return "出错了";
}
6.开启feign进行接口调用,服务的降级(yml文件)
feign:
sentinel:
enabled: true
7.1添加启动类注解
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class Application84 {
public static void main(String[] args) {
SpringApplication.run(Application84.class,args);
}
}
7.2编写接口
@FeignClient(name = "cloud-alibaba-netty",fallback = OpenfeignImpl.class)
public interface OpenfigenServer {
@GetMapping("/provider/test1/{id}")
String getTest1(@PathVariable("id")Integer id);
}
7.3 编写实现类(方法出错后的兜底方法)
@Component
public class OpenfeignImpl implements OpenfigenServer{
@Override
public String getTest1(Integer id) {
return "你访问的服务出错了";
}
}
7.4 编写controller进行调用
@Resource
private OpenfigenServer server;
@GetMapping("/openfeign/{id}")
String getTest1(@PathVariable("id")Integer id){
return server.getTest1(id);
}
@GetMapping("/np")
public String getNp(){
return "np大法好";
}
8 sentinel持久化配置(sentinel-datasource-nacos)
8.1编写yml文件
server:
port: 84
spring:
application:
name: cloud-alibaba-84
cloud:
nacos:
discovery:
server-addr: localhost:8848
sentinel:
transport:
port: 8719
dashboard: localhost:8080
datasource:
ds1:
nacos:
server-addr: localhost:8848
dataId: ${spring.application.name}
groupId: DEFAULT_GROUP
data_type: json
rule_type: flow
8.2 nacos配置文件的添加(json是详细自己配制的流控规则)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c3c9c1177d2d9b26e116b297ac5f9a5c.png)
8.3 sentinel默认情况下服务重启后,流控规则就会消失,配置后详细配置的就会从nacos中拉取,nacos有数据库的持久化存储