3步让Dubbo项目快速集成Sentinel

简介: 在微服务系统中,缓存、限流、熔断是保证系统高可用的三板斧。本文通过3个步骤,让Dubbo项目快速集成使用Sentinel实现系统限流。

在微服务系统中,缓存、限流、熔断是保证系统高可用的三板斧。本文通过3个步骤,让Dubbo项目快速集成使用Sentinel实现系统限流。

本文接着《5小步快速集成使用sentinel限流》,继续介绍Dubbo项目如何快速集成使用Sentinel。

1、环境和资源准备

环境和资源准备,参看《5小步快速集成使用sentinel限流》

2、启动sentinel-dashboard

下载sentinel-dashboard,然后执行命令启动:java -jar sentinel-dashboard-1.8.0.jar

启动完毕后,通过http://localhost:8080/#/dashboard访问dashboard,出现如下界面:

3、项目集成sentinel

项目中集成sentinel分如下3步。

3.1、引入pom

<!-- 这是sentinel的核心依赖 -->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-core</artifactId>
    <version>1.8.0</version>
</dependency>
<!-- 这是将自己项目和sentinel-dashboard打通的依赖 -->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-transport-simple-http</artifactId>
    <version>1.8.0</version>
</dependency>
<!-- 这是dubbo集成setinel的核心依赖 -->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-dubbo-adapter</artifactId>
    <version>1.8.0</version>
</dependency>

这里有一点要注意,如果有的项目之前依赖了spring-cloud-alibaba-dependencies,那要先从这个依赖里把sentinel相关依赖排除掉。不排除的情况下,可能会出现代码配置流控规则不生效的问题。

<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  <version>2.1.3.RELEASE</version>
  <type>pom</type>
  <scope>import</scope>
  <exclusions>
      <exclusion>
          <groupId>com.alibaba.csp</groupId>
          <artifactId>sentinel-annotation-aspectj</artifactId>
      </exclusion>
      <exclusion>
          <groupId>com.alibaba.csp</groupId>
          <artifactId>sentinel-cluster-client-default</artifactId>
      </exclusion>
      <exclusion>
          <groupId>com.alibaba.csp</groupId>
          <artifactId>sentinel-cluster-common-default</artifactId>
      </exclusion>
      <exclusion>
          <groupId>com.alibaba.csp</groupId>
          <artifactId>sentinel-cluster-server-default</artifactId>
      </exclusion>
      <exclusion>
          <groupId>com.alibaba.csp</groupId>
          <artifactId>sentinel-datasource-extension</artifactId>
      </exclusion>
      <exclusion>
          <groupId>com.alibaba.csp</groupId>
          <artifactId>sentinel-datasource-nacos</artifactId>
      </exclusion>
      <exclusion>
          <groupId>com.alibaba.csp</groupId>
          <artifactId>sentinel-parameter-flow-control</artifactId>
      </exclusion>
      <exclusion>
          <groupId>com.alibaba.csp</groupId>
          <artifactId>sentinel-reactor-adapter</artifactId>
      </exclusion>
      <exclusion>
          <groupId>com.alibaba.csp</groupId>
          <artifactId>sentinel-spring-webflux-webflux-adapter</artifactId>
      </exclusion>
      <exclusion>
          <groupId>com.alibaba.csp</groupId>
          <artifactId>sentinel-spring-webflux-webmvc-adapter</artifactId>
      </exclusion>
      <exclusion>
          <groupId>com.alibaba.csp</groupId>
          <artifactId>sentinel-datasource-nacos</artifactId>
      </exclusion>
      <exclusion>
          <groupId>com.alibaba.csp</groupId>
          <artifactId>sentinel-spring-webflux-webmvc-adapter</artifactId>
      </exclusion>
      <exclusion>
          <groupId>com.alibaba.csp</groupId>
          <artifactId>sentinel-core</artifactId>
      </exclusion>
  </exclusions>
</dependency>

3.2、增加sentinel.properties配置

application.properties同级目录下,增加sentinel.properties文件,配置内容如下:

# 集成到sentinel的项目名称
project.name=dubbo-sentinel-demo
# 对应的sentinel-dashboard地址
csp.sentinel.dashboard.server=localhost:8080

同时需要加载sentinel.properties配置,有两种加载方式,选择一种即可,如下:

3.4、配置需要被限流的资源

文中我依旧使用代码方式配置流控规则,在控制台中也可以直接配置流控规则,为什么不使用控制台方式呢?主要是应用服务器的地址会变化,详细见上一篇文章《5小步快速集成使用sentinel限流》

流控规则一般会有如下几个:

  • 资源限流规则FlowRule
  • 异常熔断降级规则DegradeRule
  • 系统过载保护规则SystemRule
  • 访问黑白名单规则AuthorityRule

本文继续使用资源限流规则做示例。

注意,Dubbo配置被限流资源时,不能使用打注解@SentinelResource的方式。要使用类名:方法名(参数类名)的方式设置资源名。比如这样下面代码里的RES_KEY或者INTERFACE_RES_KEY

public class FooProviderBootstrap {

    // 资源名-具体方法
    private static final String RES_KEY = "com.alibaba.csp.sentinel.demo.dubbo.FooService:sayHello(java.lang.String)";
    // 资源名-接口
    private static final String INTERFACE_RES_KEY = "com.alibaba.csp.sentinel.demo.dubbo.FooService";

    public static void main(String[] args) {
        initFlowRule();
        System.out.println("Service provider is ready");
    }

    private static void initFlowRule() {
        FlowRule flowRule = new FlowRule();
        flowRule.setResource(RES_KEY);
        flowRule.setCount(1);
        flowRule.setGrade(RuleConstant.FLOW_GRADE_QPS);
        flowRule.setLimitApp("default");
        FlowRuleManager.loadRules(Collections.singletonList(flowRule));
    }
}

4、启动测试

测试流程与上一篇文章《5小步快速集成使用sentinel限流》类似。只不过这次还需要在搭建一个dubbo-consumer调用dubbo-provider。

Dubbo项目与Web项目展示的限流资源有所不同:

  • 簇点链路:这里Web项目只会展示被限流的资源,而Dubbo只要有接口被调用就会被调用。
  • 资源名称:在展示资源名称时,Web项目展示的是@SentinelResource设置名称,或者代码里设置的资源名,而Dubbo项目只能展示完整的类名+方法名
  • 资源展示效果如下:

限流效果如下:

5、总结

本文主要介绍Dubbo项目如何快速集成Sentinel实现系统限流。整体步骤和上一篇文章《5小步快速集成使用sentinel限流》类似。只不过有2点需要注意:

  • 老的sentinel依赖要排除掉,采用新的依赖,不排除的话,可能会导致代码里配置的流控规则不生效。
  • 代码设置资源时flowRule.setResource(RES_KEY);,资源定义的格式类名:方法名(参数类名),注意类名和参数类名都需要带上完整路径。不能直接在接口或者实现类的方法上打注解@SentinelResource

本篇完结!感谢你的阅读,欢迎点赞 关注 收藏 私信!!!

原文链接:http://www.mangod.top/articles/2023/09/22/1695364279992.htmlhttps://mp.weixin.qq.com/s/yVa9_4--uSmFO3CkdWM-Vw

相关文章
|
2月前
|
Java Maven
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
这篇文章是一份关于Maven的安装和配置指南,包括下载、环境变量设置、配置文件修改、IDEA集成Maven以及解决jar包下载问题的方法。
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
|
27天前
|
存储 NoSQL 数据处理
组合和继承怎么集成一个性能较好的项目
组合与继承是面向对象编程的核心概念,前者通过对象间关联实现高效解耦,后者则重用代码以节省空间和内存。组合常用于现代项目,利用代理与依赖注入简化代码管理;而继承简化了子模块对父模块资源的应用,但修改会影响整体。随着分层解耦及微服务架构如SpringCloud的出现,这些技术进一步优化了数据处理效率和服务响应性能,尤其在分布式存储与高并发场景下。同步异步调用、Redis分布式应用等也广泛运用组合与继承,实现代码和内存空间的有效复用。
|
2月前
|
jenkins 测试技术 持续交付
解锁.NET项目高效秘籍:从理论迷雾到实践巅峰,持续集成与自动化测试如何悄然改变游戏规则?
【8月更文挑战第28天】在软件开发领域,持续集成(CI)与自动化测试已成为提升效率和质量的关键工具。尤其在.NET项目中,二者的结合能显著提高开发速度并保证软件稳定性。本文将从理论到实践,详细介绍CI与自动化测试的重要性,并以ASP.NET Core Web API项目为例,演示如何使用Jenkins和NUnit实现自动化构建与测试。每次代码提交后,Jenkins自动触发构建流程,通过编译和运行NUnit测试确保代码质量。这种方式不仅节省了时间,还能快速发现并解决问题,推动.NET项目开发迈向更高水平。
40 8
|
2月前
|
存储 JavaScript 前端开发
Vue中通过集成Quill富文本编辑器实现公告的发布。Vue项目中vue-quill-editor的安装与使用【实战开发应用】
文章展示了在Vue项目中通过集成Quill富文本编辑器实现公告功能的完整开发过程,包括前端的公告发布、修改、删除操作以及后端的数据存储和处理逻辑。
Vue中通过集成Quill富文本编辑器实现公告的发布。Vue项目中vue-quill-editor的安装与使用【实战开发应用】
|
2月前
|
Java Spring UED
Spring框架的异常处理秘籍:打造不败之身的应用!
【8月更文挑战第31天】在软件开发中,异常处理对应用的稳定性和健壮性至关重要。Spring框架提供了一套完善的异常处理机制,包括使用`@ExceptionHandler`注解和配置`@ControllerAdvice`。本文将详细介绍这两种方式,并通过示例代码展示其具体应用。`@ExceptionHandler`可用于控制器类中的方法,处理特定异常;而`@ControllerAdvice`则允许定义全局异常处理器,捕获多个控制器中的异常。
38 0
|
2月前
|
开发者 前端开发 开发框架
JSF与移动应用,开启全新交互体验!让你的Web应用轻松征服移动设备,让用户爱不释手!
【8月更文挑战第31天】在现代Web应用开发中,移动设备的普及使得构建移动友好的应用变得至关重要。尽管JSF(JavaServer Faces)主要用于Web应用开发,但结合Bootstrap等前端框架,也能实现优秀的移动交互体验。本文探讨如何在JSF应用中实现移动友好性,并通过示例代码展示具体实现方法。使用Bootstrap的响应式布局和组件可以确保JSF页面在移动设备上自适应,并提供友好的表单输入和提交体验。尽管JSF存在组件库较小和学习成本较高等局限性,但合理利用其特性仍能显著提升用户体验。通过不断学习和实践,开发者可以更好地掌握JSF应用的移动友好性,为Web应用开发贡献力量。
39 0
|
2月前
|
JavaScript 开发者
从零基础到实战应用:Angular入门指南带你一步步构建你的第一个Web应用——全面介绍环境搭建、项目创建、组件开发与应用集成
【8月更文挑战第31天】本文档是针对初学者的Angular入门指南。通过详细步骤与示例代码,教你如何使用Angular CLI搭建开发环境、创建新项目、添加及配置组件,并运行首个应用。Angular是由Google开发的强大Web框架,专为高效构建复杂单页应用设计。按照本指南操作,你将能够快速上手Angular,开启Web应用开发之旅。
37 0
|
5月前
|
Dubbo Java 应用服务中间件
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
|
2月前
|
Dubbo Java 应用服务中间件
💥Spring Cloud Dubbo火爆来袭!微服务通信的终极利器,你知道它有多强大吗?🔥
【8月更文挑战第29天】随着信息技术的发展,微服务架构成为企业应用开发的主流模式,而高效的微服务通信至关重要。Spring Cloud Dubbo通过整合Dubbo与Spring Cloud的优势,提供高性能RPC通信及丰富的生态支持,包括服务注册与发现、负载均衡和容错机制等,简化了服务调用管理并支持多种通信协议,提升了系统的可伸缩性和稳定性,成为微服务通信领域的优选方案。开发者仅需关注业务逻辑,而无需过多关心底层通信细节,使得Spring Cloud Dubbo在未来微服务开发中将更加受到青睐。
69 0
|
12天前
|
Dubbo 应用服务中间件 Apache
Star 4w+,Apache Dubbo 3.3 全新发布,Triple X 领衔,开启微服务通信新时代
在 Apache Dubbo 突破 4w Star 之际,Apache Dubbo 团队正式宣布,Dubbo 3.3 正式发布!作为全球领先的开源微服务框架,Dubbo 一直致力于为开发者提供高性能、可扩展且灵活的分布式服务解决方案。此次发布的 Dubbo 3.3,通过 Triple X 的全新升级,突破了以往局限,实现了对南北向与东西向流量的全面支持,并提升了对云原生架构的友好性。
下一篇
无影云桌面