sentinel + nacos 超详细使用步骤

这篇具有很好参考价值的文章主要介绍了sentinel + nacos 超详细使用步骤。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、前言

sentinel的简介和使用的详细文档请参考 https://sentinelguard.io/zh-cn/docs/introduction.html
nacos的搭建和使用介绍请参考 https://nacos.io/zh-cn/docs/quick-start.html

首先我们要明白在使用sentinel的时候有几种模式,具体有哪几种可以参考详细文档,这里我们只说明最适用于生产上的模式。
sentinel-dashboard(sentinel控制台)用于页面化监控服务,页面配置限流、熔断、系统保护、热点、来源访问控制等。
nacos用于持久化和动态配置sentinel的规则。
这里我们直接上操作步骤

2、启动sentinel-dashboard

  1. 首先在sentinel-dashboard这个连接中下载对应的jar包。
  2. 下载完成后, 使用下面命令进行启动
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -Dsentinel.dashboard.auth.username=sentinel -Dsentinel.dashboard.auth.password=123456 -jar sentinel-dashboard-1.8.5.jar

启动参数解释:
-Dserver.port=8080 										// 指定启动端口
-Dcsp.sentinel.dashboard.server=localhost:8080    		// 指定服务
-Dproject.name=sentinel-dashboard						// 指定sentinel控制台服务的名字
-Dsentinel.dashboard.auth.username=sentinel				// 指定sentinel登录名
-Dsentinel.dashboard.auth.password=123456				// 指定sentinel登录密码

  1. 看到一下日志表示启动成功(这里暂时没有遇到过启动失败的情况,又遇到失败的朋友可以评论沟通一下)
    sentinel + nacos 超详细使用步骤
  2. 登录页面
    sentinel + nacos 超详细使用步骤
  3. sentinel首页,这里因为还没有在sentinel-dashboard接入,所以还看不到我们的项目,这里我们调用一下项目的接口,便可以在控制台中看到我们的项目
    sentinel + nacos 超详细使用步骤

3、项目配置

1、maven配置

		<!--    sentinel核心包    -->
		<dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-core</artifactId>
            <version>1.8.5</version>
        </dependency>
        <!--    与sentinel控制台通信包    -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-transport-simple-http</artifactId>
            <version>1.8.5</version>
        </dependency>
        <!--    sentinel注解支持包    -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-annotation-aspectj</artifactId>
            <version>1.8.5</version>
        </dependency>
        <!--    sentinel微服务集成包    -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
        <!--   sentinel和nacos集成包     -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
            <version>1.8.5</version>
        </dependency>

2、application.xml配置

这里只配置流控、熔断、授权的配置,其他配置是相同的。
在生产上部署的时候这里需要配置一下心跳地址,注意使用client-ip而不是clientIp

spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8080
        port: 8719
        client-ip: [ip]  # 在生产上部署的时候这里需要配置一下心跳地址,注意使用client-ip而不是clientIp
      datasource:
        flow:
          nacos:
            server-addr: localhost:8848  # nacos连接地址
            namespace: d95f824e-9eb5-4181-be30-9fc4c5edf1f2
            group-id: DEFAULT_GROUP  # nacos连接的分组
            rule-type: flow  # 流控规则  rule-type 配置表示该数据源中的规则属于哪种类型的规则(flow,degrade,authority,system, param-flow, gw-flow, gw-api-group)
            data-id: sentinel-flow  # 读取配置文件的 data-id
            data-type: json #  读取培训文件类型为json
        degrade:
          nacos:
            server-addr: localhost:8848
            namespace: d95f824e-9eb5-4181-be30-9fc4c5edf1f2
            group-id: DEFAULT_GROUP
            rule-type: degrade
            data-id: sentinel-degrade
            data-type: json
        authority:
          nacos:
            server-addr: localhost:8848
            namespace: d95f824e-9eb5-4181-be30-9fc4c5edf1f2
            group-id: DEFAULT_GROUP
            rule-type: authority
            data-id: sentinel-authority
            data-type: json

3、接口配置

3.1、注解使用

value和sentinel中配置的接口地址值要一致
blockHandler是指定的通用流控异常返回类,如果写在该注解注用的方法的同一个类中,那么blockHandlerClass便不用指定,如果有通用的异常处理类,blockHandlerClass需要指定类

@SentinelResource(value = "xxx", blockHandler = "generalBlockHandler", blockHandlerClass = {BlockHandlerUtils.class})
public class BlockHandlerUtils {

    public static RespResult generalBlockHandler(JSONObject jsonObject, BlockException e) {
        e.printStackTrace();
        String msg = "未知异常";
        int status = 429;

        if (e instanceof FlowException) {
            msg = "请求被限流了";
        } else if (e instanceof ParamFlowException) {
            msg = "请求被热点参数限流";
        } else if (e instanceof DegradeException) {
            msg = "请求被降级了";
        } else if (e instanceof AuthorityException) {
            msg = "没有权限访问";
            status = 401;
        }
        return new RespResult(status, msg);
    }
}

3.2 自定义规则

public static void main(String[] args) {
    // 配置规则.
    initFlowRules();

    while (true) {
        // 1.5.0 版本开始可以直接利用 try-with-resources 特性
        try (Entry entry = SphU.entry("HelloWorld")) {
            // 被保护的逻辑
            System.out.println("hello world");
	} catch (BlockException ex) {
            // 处理被流控的逻辑
	    System.out.println("blocked!");
	}
    }
}

private static void initFlowRules(){
    List<FlowRule> rules = new ArrayList<>();
    FlowRule rule = new FlowRule();
   	// 这里
    rule.setResource("HelloWorld");
    rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
    // Set limit QPS to 20.
    rule.setCount(20);
    rules.add(rule);
    FlowRuleManager.loadRules(rules);
}

具体的规则和详细的配置就不在这里赘述了,大家可以自行去sentinel中文官网去查询。

4、Nacos适配指定数据库和启动

Nacos本身仅支持Mysql数据库,但实际开发中,我们可能要用到其他的数据库进行存储,大家可以根据https://blog.csdn.net/weixin_43148701/article/details/126015374
这片文章进行修改数据库,但是其中可能会遇到不少问题,在这里说明一下:
1、idea要下载一下插件Protobuf,没有这个插件,编译会报错
2、nacos源码中的pom-all.xml中需要修改下面两个依赖的版本号,可根据nacos版本自行进行升级,我这里用的是nacos-2.1.2,源码中本身所用的版本,在我本地编译不过,网上也找了本多解决版本,大多不能生效,进行了版本升级后成功编译通过。
sentinel + nacos 超详细使用步骤
3、打包的时候可能会出现错误,但只要整体打包成功,便没有问题。
4、Nacos启动的时候使用./startup.sh -m standalone,即可启动单机版,默认是集群

5、Nacos发布sentinel

1、根据不同的业务流程可以在代码中进行动态发布和删除相关规则,这里我以授权规则为例,进行介绍

@Configuration
@Slf4j
public class NacosConfig {

    @Value("${spring.cloud.sentinel.datasource.authority.nacos.server-addr}")
    private String serverAddr;
    @Value("${spring.cloud.sentinel.datasource.authority.nacos.namespace}")
    private String namespace;

    @Bean
    @Primary
    public ConfigService configService() {
        Properties properties = new Properties();
        properties.put("serverAddr", serverAddr);
        properties.put("namespace", namespace);
        try {
            return NacosFactory.createConfigService(properties);
        } catch (NacosException e) {
            log.error(e.toString(), e);
        }
        return null;
    }
}
@Component
@Slf4j
public class NacosListener {

    @Resource
    ConfigService configService;

    @Value("${spring.cloud.sentinel.datasource.authority.nacos.group-id}")
    private String sentinelAuthorityGroupId;

    @Value("${spring.cloud.sentinel.datasource.authority.nacos.data-id}")
    private String sentinelAuthorityDataId;

    /**
     * 向nacos发布初始化内容
     *
     * @param jsonArray 发布的数据
     * @throws Exception 抛出的异常
     */
    public void insertAuthConfig(JSONArray jsonArray) throws Exception {
        // 先查询一下nacos上是否已有数据
        String config = configService.getConfig(sentinelAuthorityDataId, sentinelAuthorityGroupId, 5000);
        JSONArray parseArray = JSONArray.parseArray(config);
        if (parseArray.size() > 0) {
            updateAuthConfig(jsonArray);
        } else {
            // 如果nacos上没有授权规则的数据则进行新增
            //发布内容
            boolean b = configService.publishConfig(sentinelAuthorityDataId, sentinelAuthorityGroupId, jsonArray.toJSONString());
            if (b) {
                log.info("Nacos发布成功!");
            } else {
                log.error("Nacos发布失败!");
            }
        }
    }

    /**
     * 修改nacos的配置
     *
     * @param array 发布的数据
     */
    public void updateAuthConfig(JSONArray array) throws NacosException {
        String config = configService.getConfig(sentinelAuthorityDataId, sentinelAuthorityGroupId, 5000);
        JSONArray jsonArray = JSONArray.parseArray(config);
        boolean flag = false;
        for (int i = 0; i < jsonArray.size(); i++) {
            JSONObject json = jsonArray.getJSONObject(i);
            for (int j = 0; j < array.size(); j++) {
                JSONObject jsonObject = array.getJSONObject(j);
                if (json.getString("resource").equalsIgnoreCase(jsonObject.getString("resource"))) {
                    // 查看一下nacos上是否有关于传入访问地址的白名单如果有,那么就对将传入的IP加到原有的
                    String limitApp = json.getString("limitApp");
                    String ip = jsonObject.getString("limitApp");
                    String[] split = limitApp.split(",");
                    boolean f = false;
                    for (String s : split) {
                        if (s.equalsIgnoreCase(ip)) {
                            f = true;
                            break;
                        }
                    }
                    if (!f) {
                        limitApp += "," + ip;
                    } else {
                        log.info("Nacos上已有需要发布的数据!");
                        return;
                    }
                    json.put("limitApp", limitApp);
                    flag = true;
                }
            }
        }
        boolean b;
        if (flag) {
            // nacos上有需要添加给名单的资源,将ip进行添加
            b = configService.publishConfig(sentinelAuthorityDataId, sentinelAuthorityGroupId, jsonArray.toString());
        } else {
            // nacos没有需要添加的资源,将资源进行添加
            jsonArray.addAll(array);
            b = configService.publishConfig(sentinelAuthorityDataId, sentinelAuthorityGroupId, jsonArray.toString());
        }
        if (b) {
            log.info("Nacos发布成功!");
        } else {
            log.error("Nacos发布失败!");
        }
    }
}

到此基本就差不多啦,有问题的道友们,欢迎评论区留言!文章来源地址https://www.toymoban.com/news/detail-404497.html

到了这里,关于sentinel + nacos 超详细使用步骤的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 熟练使用Nacos、GateWay、OpenFeign、Sentinel常用组件

    Nacos 面试题 : 请简述Nacos是什么,它主要解决了什么问题? Nacos提供了哪些核心功能? Nacos是如何支持服务发现的? 如何使用Nacos作为配置中心? Nacos的集群部署是如何实现的? 答案 : Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它主要解

    2024年04月13日
    浏览(26)
  • Docker 部署 Nacos 超详细图文步骤

    最近在Mac中的docker安装nacos,遇到了一些问题,在百度了一些教程之后,自己也记录一下,需要的朋友可以参考下 首先需要安装mysql 新建nacos_config数据库 执行sql文件 安装nacos 运行nacos 方式一: 方式二:   创建本地映射文件夹  指定配置运行 复制相关文件 自定义启动Nacos

    2024年02月11日
    浏览(39)
  • Nacos 注册中心下载到搭建详细步骤【微服务】

    Nacos 是阿里的产品,现在是 SpringCloud 中的一个组件。它的功能要比 Eureka 更加丰富,在国内比较受欢迎。 百度网盘下载链接: https://pan.baidu.com/s/1XLn7hGp2bHBx7ICvKELtzQ?pwd=dju6 Nacos 官网下载: https://nacos.io/ ① 点击前往 Github Github 页面打不开的可以下一个加速器,我用的 Watt Toolk

    2024年02月03日
    浏览(32)
  • nacos安装超详细步骤(windows+linux+docker)

    Nacos 是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 动态服务发现:支持基于 DNS 和基于 RPC 的服务发现。服务提供者可以主动注册服务,服务消费者可以动态发现服务。 动态配置服务:支持云原生微服务动态配置,可以作为数据中心管理和推送配置文件

    2024年02月07日
    浏览(53)
  • SpringCloud小项目——订单积分商城 & 使用Nacos、Open Feign、Gateway、Sentinel技术栈

    使用Nacos、Open Feign、Gateway、Sentinel技术栈实现XX公司订单、库存、积分的案例开发,以下是服务调用关系 git代码:https://gitee.com/pet365/spring-cloud-goods https://github.com/RainbowForest/e-commerce-microservices https://awesomeopensource.com/project/RainbowForest/e-commerce-microservices 使用Nacos、Open Feign、Gate

    2024年02月08日
    浏览(33)
  • nacos注册中心+Ribbon负载均衡+完成openfeign的调用(超详细步骤)

    目录 1.注册中心 1.1.nacos注册中心 1.2. 微服务注册和拉取注册中心的内容 2.3.修改订单微服务的代码 3.负载均衡组件 3.1.什么是负载均衡 3.2.什么是Ribbon 3.3.Ribbon 的主要作用 3.4.Ribbon提供的负载均衡策略 4.openfeign完成服务调用 4.1.什么是OpenFeign 4.2.完成openfeign的调用  继  微服务

    2024年02月16日
    浏览(25)
  • 单臂路由的简介及详细配置步骤

    1、单臂路由概述 单臂路由(router-on-a-stick)是指在路由器的一个接口上通过配置子接口(或“逻辑接口”,并不存在真正物理接口)的方式,实现原来相互隔离的不同VLAN(虚拟局域网)之间的互联互通 1.1 单臂路由实现不同VLAN之间的通信 链路类型 交换机连接主机的端口为

    2024年02月08日
    浏览(33)
  • 《Docker极简教程》--前言--Docker的简介

    Docker 是一种用于构建、部署和运行应用程序的开源平台,它使用容器技术来实现轻量级、可移植和自包含的应用程序环境。Docker 的核心思想是将应用程序及其依赖项打包到一个称为容器的封闭单元中,从而消除了在不同环境中运行应用程序时可能出现的许多兼容性和依赖性

    2024年02月21日
    浏览(37)
  • 【免费】【前言】Stable Diffusion WebUI 课程简介

    欢迎来到  聚梦小课堂  的 Stable Diffusion系统图文课堂。 在这里,会详细介绍 免费的本地版AI绘画软件 —— Stable Diffusion(WebUI+Fooocus) 的方方面面,包括但不限于:如何安装,如何使用,参数含义,常见问题,使用技巧、综合商业案例... 使用中若发现有错误或者任何建议,

    2024年02月02日
    浏览(34)
  • Sentinel Dashboard集成Nacos

    当项目上Sentinel Dashboard做流量监控的时候,我们可以通过Sentinel控制台修改限流配置,但当我们使用Nacos作为配置中心动态配置流控规则的时候,问题就来了。 首先我们要明白,Sentinel Dashboard的配置是从机器的内存中加载的,如果使用Nacos、Apollo、Zookeeper等作为我们动态加载限

    2024年02月15日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包