springcloud alibaba sentinel 的使用

1.导入依赖

</dependency>
        <dependency><!--注册到nacos-->
            <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><!--sentinel必要依赖-->
            <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  #注册进nacos
    sentinel:
      transport:
        port: 8719   #sentinel和应用交互的端口
        dashboard: localhost:8080   #监控8401服务

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默认懒加载模式,访问过一次后才会出现)

在这里插入图片描述

5.sentinel进行流控的异常自定义提示(定义blockHander进行处理兜底)

    @RequestMapping("/hotkey")
    @SentinelResource(value = "hotkey",blockHandler = "deal_key")//blockHandler处理热点数据
    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:  #配置持久化(记录设置的流控规则到nacos)
        ds1:
          nacos:
            server-addr: localhost:8848
            dataId: ${spring.application.name}
            groupId: DEFAULT_GROUP
            data_type: json
            rule_type: flow
8.2 nacos配置文件的添加(json是详细自己配制的流控规则)

在这里插入图片描述

8.3 sentinel默认情况下服务重启后,流控规则就会消失,配置后详细配置的就会从nacos中拉取,nacos有数据库的持久化存储
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值