Spring boot集成sentinel限流服务-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

Sentinel集成文档

Sentinel控制台

Sentinel本身不支持持久化项目通过下载源码改造后将规则配置持久化进nacos中sentinel重启后配置不会丢失。

架构图

改造步骤

接着我们就要改造Sentinel的源码。因为官网提供的Sentinel的jar是原始模式的所以需要改造所以我们需要拉取源码下来改造一下然后自己编译jar包。

源码地址https://github.com/alibaba/Sentinel

拉取下来之后导入到IDEA中然后我们可以看到以下目录结构。

首先修改sentinel-dashboard的pom.xml文件

https://pic4.zhimg.com/v2-221db1fba4b3ba417c190e53b6c918f3_r.jpg

第二步把test目录下的四个关于Nacos关联的类移到rule目录下。

接着NacosConfig添加Nacos的地址配置。

最关键的是FlowControllerV1的改造这是规则配置的增删改查的一些接口。

把移动到rule目录下的两个服务添加到FlowControllerV1类中。

@Autowired

@Qualifier("flowRuleNacosProvider")

private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider;

@Autowired

@Qualifier("flowRuleNacosPublisher")

private DynamicRulePublisher<List<FlowRuleEntity>> rulePublisher;

添加私有方法publishRules()用于推送配置

private void publishRules(/*@NonNull*/ String app) throws Exception {

    List<FlowRuleEntity> rules = repository.findAllByApp(app);

    rulePublisher.publish(app, rules);

}

修改apiQueryMachineRules()方法。

修改apiAddFlowRule()方法。

修改apiUpdateFlowRule()方法。

修改apiDeleteFlowRule()方法。

Sentinel控制台的项目就改造完成了用于生产环境就编译成jar包运行如果是学习可以直接在IDEA运行。

附件包含已经改造好的包直接修改配置文件中nacos的配置即可使用。

客户端工程fssc或者console

引入pom

<!--sentinel nacos-->

        <dependency>

            <groupId>com.alibaba.csp</groupId>

            <artifactId>sentinel-datasource-nacos</artifactId>

            <version>1.8.5</version>

        </dependency>

        <!--sentinel-->

        <dependency>

            <groupId>com.alibaba.cloud</groupId>

            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>

            <version>2021.1</version>

        </dependency>

添加配置

spring:

  cloud:

    sentinel:

      enabled: true # 是否开启。默认为 true 开启

      eager: true # 是否饥饿加载。默认为 false 关闭

      transport:

        #配置sentinel地址,端口

        dashboard: 127.0.0.1:8080   #这里是sentinel控制台地址

        #客户端IP(sentinel dashboard进行实时监控的主机ip地址)

        # 默认端口8719端口假如被占用会自动从8719开始依次+1扫描直到找到未被占用的端口

        port: 8725

#        client-ip: 192.168.30.200   #这里是我windows地址

      datasource:

        flow:

          nacos:

            server-addr: ${spring.cloud.nacos.discovery.server-addr}

            namespace: sentinel_rule

            dataId: cai-demo-flow-rules

            groupId: SENTINEL_GROUP

            # 规则类型取值见

            # org.springframework.cloud.alibaba.sentinel.datasource.RuleType

            rule-type: flow

            data-type: json

添加注解配置类

添加统一异常处理

至此单机模式集成完成

集群改造

集群只需要修改客户端即可                   

添加集群pom

<dependency>

            <groupId>com.alibaba.csp</groupId>

            <artifactId>sentinel-cluster-client-default</artifactId>

            <version>1.8.5</version>

        </dependency>

        <dependency>

            <groupId>com.alibaba.csp</groupId>

            <artifactId>sentinel-cluster-server-default</artifactId>

            <version>1.8.5</version>

        </dependency>

添加InitFunc实现类在sentinel源码demo可以找到

继续添加实体类和常量类

在resource中添加sentinel.properties配置文件主要解决DemoClusterInitFunc类中无法读取配置文件的问题

继续添加SPI文件

至此集群改造完成

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Spring