• Spring boot集成sentinel限流服务


    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> ruleProvider;

    @Autowired

    @Qualifier("flowRuleNacosPublisher")

    private DynamicRulePublisher> rulePublisher;

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

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

        List rules = repository.findAllByApp(app);

        rulePublisher.publish(app, rules);

    }

    修改apiQueryMachineRules()方法。

    修改apiAddFlowRule()方法。

    修改apiUpdateFlowRule()方法。

    修改apiDeleteFlowRule()方法。

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

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

    客户端工程(fssc或者console)

    引入pom

           

                com.alibaba.csp

                sentinel-datasource-nacos

                1.8.5

           

           

           

                com.alibaba.cloud

                spring-cloud-starter-alibaba-sentinel

                2021.1

           

    添加配置

    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:

                com.alibaba.csp

                sentinel-cluster-client-default

                1.8.5

           

           

                com.alibaba.csp

                sentinel-cluster-server-default

                1.8.5

           

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

    继续添加实体类和常量类:

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

    继续添加SPI文件

    至此集群改造完成

  • 相关阅读:
    JAVA:实现GCD最大公约数算法(附完整源码)
    基于树莓派的人脸识别门禁系统
    React 组件实例的三大核心—props
    【ACG】博主在专栏更新内容后,及时通知关注他的用户去阅读
    【Qt】对话框QDialog
    上海亚商投顾:沪指重返3100点 房地产板块掀涨停潮
    批量自动html文档排版工具
    hutool两个list取差集subtractToList
    【JavaSE专栏89】Java字符串和XML数据结构的转换,高效灵活转变数据
    Type-challehges learning: pick
  • 原文地址:https://blog.csdn.net/caicai250/article/details/134241820