(十五)docker安装sentinel,客户端配置规则本地持久化

这篇具有很好参考价值的文章主要介绍了(十五)docker安装sentinel,客户端配置规则本地持久化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 一、简介

操作系统:Linux  CentOS 7.3 64位

docker版本:19.03.8

sentinel版本:1.8.0

二、实践

1、拉取镜像

docker pull bladex/sentinel-dashboard:1.8.0

(十五)docker安装sentinel,客户端配置规则本地持久化

 (十五)docker安装sentinel,客户端配置规则本地持久化

2、运行容器

docker run --name sentinel \
-p 8858:8858 \
--privileged=true \
--restart=always \
-d bladex/sentinel-dashboard:1.8.0

(十五)docker安装sentinel,客户端配置规则本地持久化

 (十五)docker安装sentinel,客户端配置规则本地持久化

3.访问sentinel

http://192.168.121.132:8858/

账号密码默认都是sentinel

(十五)docker安装sentinel,客户端配置规则本地持久化

三、客户端配置规则本地持久化

sentinel配置的规则默认是存在内存里的,不够稳定,所以我们需要持久化到本地文件中。

1.新建持久化处理类

在我们连接sentinel的springboot项目客户端中新增持久化处理类。

package com.example.config;

import com.alibaba.csp.sentinel.command.handler.ModifyParamFlowRulesCommandHandler;
import com.alibaba.csp.sentinel.datasource.*;
import com.alibaba.csp.sentinel.init.InitFunc;
import com.alibaba.csp.sentinel.slots.block.authority.AuthorityRule;
import com.alibaba.csp.sentinel.slots.block.authority.AuthorityRuleManager;
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule;
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRuleManager;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowRuleManager;
import com.alibaba.csp.sentinel.slots.system.SystemRule;
import com.alibaba.csp.sentinel.slots.system.SystemRuleManager;
import com.alibaba.csp.sentinel.transport.util.WritableDataSourceRegistry;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;

import java.io.File;
import java.io.IOException;
import java.util.List;

//sentinel规则持久化
public class SentinelRulesPersistence implements InitFunc {

    private String appcationName = "order";

    @Override
    public void init() throws Exception {
        String ruleDir = System.getProperty("user.home") + "/sentinel-rules/" + appcationName;
        System.out.println(ruleDir);
        String flowRulePath = ruleDir + "/flow-rule.json";
        String degradeRulePath = ruleDir + "/degrade-rule.json";
        String systemRulePath = ruleDir + "/system-rule.json";
        String authorityRulePath = ruleDir + "/authority-rule.json";
        String paramFlowRulePath = ruleDir + "/param-flow-rule.json";

        this.mkdirIfNotExits(ruleDir);
        this.createFileIfNotExits(flowRulePath);
        this.createFileIfNotExits(degradeRulePath);
        this.createFileIfNotExits(systemRulePath);
        this.createFileIfNotExits(authorityRulePath);
        this.createFileIfNotExits(paramFlowRulePath);

        // 流控规则
        ReadableDataSource<String, List<FlowRule>> flowRuleRDS = new FileRefreshableDataSource<>(flowRulePath, flowRuleListParser);
        FlowRuleManager.register2Property(flowRuleRDS.getProperty());
        WritableDataSource<List<FlowRule>> flowRuleWDS = new FileWritableDataSource<>(flowRulePath, this::encodeJson);
        WritableDataSourceRegistry.registerFlowDataSource(flowRuleWDS);

        // 降级规则
        ReadableDataSource<String, List<DegradeRule>> degradeRuleRDS = new FileRefreshableDataSource<>(degradeRulePath, degradeRuleListParser);
        DegradeRuleManager.register2Property(degradeRuleRDS.getProperty());
        WritableDataSource<List<DegradeRule>> degradeRuleWDS = new FileWritableDataSource<>(degradeRulePath, this::encodeJson);
        WritableDataSourceRegistry.registerDegradeDataSource(degradeRuleWDS);

        // 系统规则
        ReadableDataSource<String, List<SystemRule>> systemRuleRDS = new FileRefreshableDataSource<>(systemRulePath, systemRuleListParser);
        SystemRuleManager.register2Property(systemRuleRDS.getProperty());
        WritableDataSource<List<SystemRule>> systemRuleWDS = new FileWritableDataSource<>(systemRulePath, this::encodeJson);
        WritableDataSourceRegistry.registerSystemDataSource(systemRuleWDS);

        // 授权规则
        ReadableDataSource<String, List<AuthorityRule>> authorityRuleRDS = new FileRefreshableDataSource<>(authorityRulePath, authorityRuleListParser);
        AuthorityRuleManager.register2Property(authorityRuleRDS.getProperty());
        WritableDataSource<List<AuthorityRule>> authorityRuleWDS = new FileWritableDataSource<>(authorityRulePath, this::encodeJson);
        WritableDataSourceRegistry.registerAuthorityDataSource(authorityRuleWDS);

        // 热点参数规则
        ReadableDataSource<String, List<ParamFlowRule>> paramFlowRuleRDS = new FileRefreshableDataSource<>(paramFlowRulePath, paramFlowRuleListParser);
        ParamFlowRuleManager.register2Property(paramFlowRuleRDS.getProperty());
        WritableDataSource<List<ParamFlowRule>> paramFlowRuleWDS = new FileWritableDataSource<>(paramFlowRulePath, this::encodeJson);
        ModifyParamFlowRulesCommandHandler.setWritableDataSource(paramFlowRuleWDS);

    }

    private Converter<String, List<FlowRule>> flowRuleListParser = source -> JSON.parseObject(source, new TypeReference<List<FlowRule>>(){});
    private Converter<String, List<DegradeRule>> degradeRuleListParser = source -> JSON.parseObject(source, new TypeReference<List<DegradeRule>>(){});
    private Converter<String, List<SystemRule>> systemRuleListParser = source -> JSON.parseObject(source, new TypeReference<List<SystemRule>>(){});
    private Converter<String, List<AuthorityRule>> authorityRuleListParser = source -> JSON.parseObject(source, new TypeReference<List<AuthorityRule>>(){});
    private Converter<String, List<ParamFlowRule>> paramFlowRuleListParser = source -> JSON.parseObject(source, new TypeReference<List<ParamFlowRule>>(){});

    private void mkdirIfNotExits(String filePath) throws IOException {
        File file = new File(filePath);
        if (!file.exists()) {
            file.mkdirs();
        }
    }

    private void createFileIfNotExits(String filePath) throws IOException {
        File file = new File(filePath);
        if (!file.exists()) {
            file.createNewFile();
        }
    }

    private <T> String encodeJson(T t) {
        return JSON.toJSONString(t);
    }
}

2.新增配置文件指向我们的持久化处理类

在resources文件夹创建目录META-INF/services,然后添加文件

com.alibaba.csp.sentinel.init.InitFunc

没有后缀格式。

(十五)docker安装sentinel,客户端配置规则本地持久化

 文件内容为持久化处理类的全路径,例如:

com.example.config.SentinelRulesPersistence

3.配置规则查看效果

新增一条流控规则。

(十五)docker安装sentinel,客户端配置规则本地持久化

然后打开客户端的user.home目录(不同电脑路径不一样)。

(十五)docker安装sentinel,客户端配置规则本地持久化文章来源地址https://www.toymoban.com/news/detail-479203.html

到了这里,关于(十五)docker安装sentinel,客户端配置规则本地持久化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 鸿蒙Hi3861学习十五-Huawei LiteOS-M(Socket客户端)

            在网络编程的时候,不管是客户端还是服务端,都离不开 Socket 。那什么是Socket,这里做个简单介绍。详细的内容,可以参考这篇文章:WIFI学习一(socket介绍)_wifi socket_t_guest的博客-CSDN博客          socket在计算机领域,被翻译为“ 套接字 ”。它是计算机之间进

    2024年02月05日
    浏览(49)
  • Redis在云服务器上的安装与客户端连接配置

    yum 安装 redis,使用以下命令,直接将 redis 安装到 linux 服务器: yum -y install redis 启动 redis使用以下命令,以后台运行方式启动 redis: redis-server /etc/redis.conf 操作 redis,使用以下命令启动 redis 客户端: redis-cli 具体操作如下图所示: 将 redis 配置文件下载到本地:redis 配置文件

    2024年02月15日
    浏览(75)
  • 安装和配置SNMP(windows10和Linux)--附SNMP客户端工具

    首先需要安装 snmp ,使用下面的命令进行安装 安装完毕之后,使用下面的命令查看是否安装成功 当命令行显示如图即为安装成功 使用下面的命令启动 snmp 再次使用下面的命令查看 snmp 是否成功启动 如果出现下图所示的 active 则说明 snmp 启动成功了 直接从防勒索服务器上将

    2024年02月04日
    浏览(60)
  • 银河麒麟服务器x86安装ntp客户端,并配置成功可以同步时间

    其中192.168.10.91是ntp服务器ip 更改错误的时间时间:引号不能忘记 查看时间 输入下面命令 刚开始看到的应该是上面设置的时间 过几分钟之后就能看到时间同步成正确的时间了 

    2024年01月25日
    浏览(137)
  • 最好用的Redis客户端:RedisInsight安装部署教程, 官方亲儿子真香, 2种安装方式(包含Docker方式), 超详细教程

    大家好,我是老码农。 《码农说》公众号的第9篇文章迎着即将到来2024的步伐暖暖来袭。 很多时候,我们不需要Redis Stack这个套装,只需要一个Redis客户端就够了。 那接下来我们分享如何安装RedisInsight这个优秀的客户端工具。 为什么是款优秀的客户端 操作系统:支持Windows、

    2024年01月17日
    浏览(60)
  • TDengine初试 | TD服务器安装与参数配置 | TD客户端安装与配置 | 使用DBeaver工具连接到TDengine服务器端

    零、背景   在debian11系统(开发板)上安装TD服务器,在Window11上安装TD客户端。然后在Windows11上面使用DBeaver工具连接TDengine服务器端数据库中。 一、TDengine的下载 下载的版本是3.0.2.6 TDengine-server-3.0.2.6-Linux-arm64.tar.gz TDengine-client-3.0.2.6-Windows-x64.exe taosTools-2.5.2-Linux-arm64-comp3.

    2024年01月18日
    浏览(52)
  • Docker客户端命令

    使用  podman  模拟  Docker CLI  的功能,并创建  /etc/containers/nodocker  文件以静默消息。管理 pods、容器和镜像。 用法: podman [选项] [命令] 命令 : attach 附加到一个正在运行的容器 auto-update 根据容器的自动更新策略自动更新容器 build 使用 Containerfiles 中的指令构建镜像 commi

    2024年04月14日
    浏览(56)
  • 不依赖docker客户端导出docker镜像

    此项目已经开源发布至GitHub https://github.com/DockerContainerService/image-save 1、支持linux、windows的amd64、arm64架构机器 2、支持不安装docker客户端情况下导出镜像tar包 3、支持公开镜像仓库/私有镜像仓库 4、支持多线程加速下载镜像 5、支持使用自定义镜像源加速下载镜像 大家在使用过

    2023年04月08日
    浏览(42)
  • 客户端(本地)docker镜像存储结构

    参考自: Docker学习:Image的本地存储结构_weixin_34054866的博客-CSDN博客                  docker中各ID之间的关系和计算(二)-layerID-diffID-chainID-cacheID的计算_Penguinbupt的博客-CSDN博客 本地下载的docker镜像存储在/var/lib/docker/image/overlay2/目录下。 在一上目录下有distribution 、 im

    2023年04月22日
    浏览(45)
  • 什么是docker(docker客户端、镜像、容器、仓库)

    Docker 是一个开源的容器化平台,它可以让开发者打包应用程序及其依赖项成为一个轻量级、可移植的容器,然后在任何环境中运行。Docker 容器将应用程序及其依赖项打包到一个标准化单元中,包括代码、运行时环境、系统工具、系统库等,确保应用程序在不同的环境中具有

    2024年04月10日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包