美文网首页Spring Cloud
sentinel集成与sentinel配置持久化到nacos

sentinel集成与sentinel配置持久化到nacos

作者: hcq0514 | 来源:发表于2021-01-19 15:33 被阅读0次

    部署sentinel控制台

    1. 拉取sentinel代码,自己修改后增加nacos持久化https://github.com/hcq0514/Sentinel 注意可自行使用master分支,未修改可正常运行,my分支是修改完的
    2. 进入到dashboard项目中,使用如下命令将代码打包成一个 sentinel-dashboard.jar
    mvn clean package
    

    3.将jar包打包成docker镜像

    • Dockerfile
    # 该镜像需要依赖的基础镜像
    FROM java:8
    # 将当前目录下的jar包复制到docker容器的/目录下
    ADD sentinel-dashboard.jar /sentinel-dashboard.jar
    # 声明服务运行端口
    EXPOSE 8885
    # 指定docker容器启动时运行jar包
    ENTRYPOINT ["java", "-jar","/sentinel-dashboard.jar"]
    # 指定维护者的名字
    MAINTAINER hcq
    
    • run.sh
    #!/usr/bin/env bash
    # 定义应用组名
    group_name='mall'
    # 定义应用名称
    app_name='sentinel2'
    # 定义应用版本
    app_version='1.0-SNAPSHOT'
    # 定义应用环境
    profile_active='test'
    echo '----copy jar----'
    docker stop ${app_name}
    echo '----stop container----'
    docker rm ${app_name}
    echo '----rm container----'
    docker rmi ${group_name}/${app_name}:${app_version}
    echo '----rm image----'
    # 打包编译docker镜像
    docker build -t ${group_name}/${app_name}:${app_version} .
    echo '----build image----'
    docker run -p 8885:8885 --name ${app_name} \
    -e TZ="Asia/Shanghai" \
    -e Dserver.port="8885" \
    -e Dcsp.sentinel.dashboard.server="8885" \
    -v /etc/localtime:/etc/localtime \
    -v /mydata/app/${app_name}/logs:/var/logs \
    -d ${group_name}/${app_name}:${app_version}
    echo '----start container----'
    
    • 运行. run.sh
    1. 登录控制台查看
      http://xxx:8885/#/login

    网关集成 (部署的应用不管是网关还是项目都需要与sentinel的控制台发送心跳,需要ip等,尽量都使用云服务器等访问的到的主机,用本地有可能会导致链接不到,无法展示请求链路等其他信息)

    1. 网关层添加依赖(这边只添加与sentinel有关的依赖,其他组件不展示)
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
            </dependency>
            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-datasource-nacos</artifactId>
                <version>1.8.0</version>
            </dependency>
    
    1. 增加配置文件
      如果用docker部署的话记得在dockerFile里面指定project.name这个是客户端注册到控制台的名称
    示例文件
    # 该镜像需要依赖的基础镜像
    FROM java:8
    # 将当前目录下的jar包复制到docker容器的/目录下
    ADD mall-portal-1.0-SNAPSHOT.jar /mall-portal-1.0-SNAPSHOT.jar
    # 声明服务运行在8085端口
    EXPOSE 8085
    # 指定docker容器启动时运行jar包
    ENV JAVA_OPTS="\
    -Xmx1g \
    -Xms1g \
    -Xmn512m \
    -XX:SurvivorRatio=8 \
    -XX:MetaspaceSize=256m "
    ENTRYPOINT java ${JAVA_OPTS}  -Dproject.name=mall-portal-service -jar mall-portal-1.0-SNAPSHOT.jar
    

    application.pro

    spring:
      main:
        allow-bean-definition-overriding: true
      cloud:
        sentinel:
          transport:
            dashboard: localhost:8885 #部署的dashboard地址
            client-ip: localhost #本机的访问ip
            port: 8720 #与sentinel交互心跳信息的端口(docker部署项目一点要开启这个端口,每个项目都不一样)
          datasource:
            # 名称随意,这些是dashboard做持久化后添加规则,会在nacos的配置文件中生成该配置(没用可不添加)
            flow:
              nacos:
                server-addr: ${spring.cloud.nacos.discovery.server-addr}
                dataId: ${spring.application.name}-flow-rules
                groupId: SENTINEL_GROUP
                rule-type: flow
            degrade:
              nacos:
                server-addr: ${spring.cloud.nacos.discovery.server-addr}
                dataId: ${spring.application.name}-degrade-rules
                groupId: SENTINEL_GROUP
                rule-type: degrade
            system:
              nacos:
                server-addr: ${spring.cloud.nacos.discovery.server-addr}
                dataId: ${spring.application.name}-system-rules
                groupId: SENTINEL_GROUP
                rule-type: system
            authority:
              nacos:
                server-addr: ${spring.cloud.nacos.discovery.server-addr}
                dataId: ${spring.application.name}-authority-rules
                groupId: SENTINEL_GROUP
                rule-type: authority
            param-flow:
              nacos:
                server-addr: ${spring.cloud.nacos.discovery.server-addr}
                dataId: ${spring.application.name}-param-flow-rules
                groupId: SENTINEL_GROUP
                rule-type: param-flow
          eager: true
    

    MVC项目集成

    1. 添加依赖(因为此处有版本冲突,则自己制定版本号)
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
                <version>2.2.3.RELEASE</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.alibaba.csp</groupId>
                        <artifactId>sentinel-spring-webmvc-adapter</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-spring-webmvc-adapter</artifactId>
                <version>1.8.0</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-datasource-nacos</artifactId>
                <version>1.8.0</version>
            </dependency>
    
    1. 增加配置文件(与网关相同,这边不重复)

    到这边基础的集成已经完成


    如果正常的话在sentinel的机器列表可以看到有注册信息

    sentinel配置持久化到nacos

    1. 把官方源码拉下来
    2. 将sentinel-dashboard的pom文件中把范围test注释掉
            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-datasource-nacos</artifactId>
    <!--            <scope>test</scope>-->
            </dependency>
    
    1. 将示例文件拷贝到dashboard里面(这里面有3种框架的集成方法)



      把 nacosConfig里面的nacos地址修改为自己的nacos地址

    @Bean
        public ConfigService nacosConfigService() throws Exception {
            return ConfigFactory.createConfigService("your nacos address");
        }
    
    1. 修改controller的方法让它直接推到nacos(以FlowControllerV1 限流controller为例)
      添加依赖
        @Autowired
        private FlowRuleNacosPublisher flowRuleNacosPublisher;
        @Autowired
        private FlowRuleNacosProvider flowRuleNacosProvider;
    
        将所有sentinelApiClient.fetchFlowRuleOfMachine(app, ip, port);
        调用的地方都改成 flowRuleNacosProvider.getRules(app)
    
        将所有sentinelApiClient.setFlowRuleOfMachineAsync(app, ip, port, rules);
        调用的地方都改成  flowRuleNacosPublisher.publish(app, rules);
    
    1. 修改其他的controller
    2. 可直接参考我sentinel下面的my分支,已经实现了持久化

    相关文章

      网友评论

        本文标题:sentinel集成与sentinel配置持久化到nacos

        本文链接:https://www.haomeiwen.com/subject/ghbqzktx.html