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

部署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. 增加配置文件(与网关相同,这边不重复)

open feign集成(默认已导入springcloud与openFeign包)

  1. 开启sentinel feign配置
feign:
  sentinel:
    enabled: true
  1. 在feign客户端上添加处理函数就行(也可添加fallback,不过就不能取到异常)
@FeignClient(value = "mall-member-service", fallbackFactory = MemberFeignClientFallbackFactory.class)

@Component
@Slf4j
public class MemberFeignClientFallbackFactory implements FallbackFactory<MemberFeignClient> {

    @Override
    public MemberFeignClient create(Throwable throwable) {
        log.error("fallback reason:{}", throwable.getMessage());
        return new MemberFeignClient() {
            @Override
            public CommonResult<String> getMemberTest() {
                String info = "该链接发生异常,请稍后重试";
                if (throwable instanceof FlowException) {
                    info = "该链接已流控,请稍后重试";
                } else if (throwable instanceof DegradeException) {
                    info = "该链接已降级,请稍后重试";
                } else {
                    info = "该链接发生异常,请稍后重试";
                }
                Asserts.fail(info + throwable.getMessage());
                return null;
//                return CommonResult.failed(info + throwable.getMessage());
            }
        };
    }
}

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


如果正常的话在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分支,已经实现了持久化
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容