Sentinel 的使用可以分为两个部分:

  • 核心库(Java 客户端):不依赖任何框架/库,能够运行于 Java 7 及以上的版本的运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持(见 )。
  • 控制台(Dashboard):控制台主要负责管理推送规则、监控、集群限流分配管理、机器发现等。

我们将会提供 本地运行 demo 和 来帮助新手快速入门。这两种方式都只需要您执行2到5个步骤。

如果您的应用使用了 Maven,则在 文件中加入以下代码即可:

如果您未使用依赖管理工具,请到 Maven Center Repository 直接下载 JAR 包。

2. 定义资源

资源 是 Sentinel 中的核心概念之一。最常用的资源是我们代码中的 Java 方法。 当然,您也可以更灵活的定义你的资源,例如,把需要控制流量的代码用 Sentinel API SphU.entry("HelloWorld")entry.exit() 包围起来即可。在下面的例子中,我们将 System.out.println("hello world"); 作为资源(被保护的逻辑),用 API 包装起来。参考代码如下:

  1. public static void main(String[] args) {
  2. // 配置规则.
  3. initFlowRules();
  4. while (true) {
  5. // 1.5.0 版本开始可以直接利用 try-with-resources 特性,自动 exit entry
  6. // 被保护的逻辑
  7. System.out.println("hello world");
  8. } catch (BlockException ex) {
  9. // 处理被流控的逻辑
  10. System.out.println("blocked!");
  11. }
  12. }

完成以上两步后,代码端的改造就完成了。

您也可以通过我们提供的 ,来定义我们的资源,类似于下面的代码:

  1. @SentinelResource("HelloWorld")
  2. public void helloWorld() {
  3. // 资源中的逻辑
  4. System.out.println("hello world");
  5. }

这样,helloWorld() 方法就成了我们的一个资源。注意注解支持模块需要配合 Spring AOP 或者 AspectJ 一起使用。

接下来,通过流控规则来指定允许该资源通过的请求次数,例如下面的代码定义了资源 HelloWorld 每秒最多只能通过 20 个请求。

完成上面 3 步,Sentinel 就能够正常工作了。更多的信息可以参考 使用文档

4. 检查效果

Demo 运行之后,我们可以在日志 ~/logs/csp/${appName}-metrics.log.xxx 里看到下面的输出:

  1. |--timestamp-|------date time----|--resource-|p |block|s |e|rt
  2. 1529998904000|2018-06-26 15:41:44|hello world|20|0 |20|0|0
  3. 1529998905000|2018-06-26 15:41:45|hello world|20|5579 |20|0|728
  4. 1529998906000|2018-06-26 15:41:46|hello world|20|15698|20|0|0
  5. 1529998908000|2018-06-26 15:41:48|hello world|20|19502|20|0|0
  6. 1529998909000|2018-06-26 15:41:49|hello world|20|18386|20|0|0

其中 代表通过的请求, block 代表被阻止的请求, s 代表成功执行完成的请求个数, e 代表用户自定义的异常, rt 代表平均响应时长。

更详细的说明可以参考:

更多的例子可以参考: Sentinel Demo 集锦

Sentinel 开源控制台支持实时监控和规则管理。接入控制台的步骤如下:

(1)下载控制台 jar 包并在本地启动:可以参见 。

(2)客户端接入控制台,需要:

  • 客户端需要引入 Transport 模块来与 Sentinel 控制台进行通信。您可以通过 pom.xml 引入 JAR 包:
  1. <dependency>
  2. <groupId>com.alibaba.csp</groupId>
  3. <artifactId>sentinel-transport-simple-http</artifactId>
  4. <version>1.8.0</version>
  5. </dependency>
  • 启动时加入 JVM 参数 -Dcsp.sentinel.dashboard.server=consoleIp:port 指定控制台地址和端口。更多的参数参见 启动参数文档
  • 确保应用端有访问量

完成以上步骤后即可在 Sentinel 控制台上看到对应的应用,机器列表页面可以看到对应的机器:

详细介绍和使用文档可参考:。

公网 Demo

若您不希望在本地另启动控制台,可以在本地运行公网 Demo,接入云上版本的 AHAS Sentinel 控制台。这个 Demo 主要是给开发者一个最快最直观的感受,能够最快地感受到:

  1. Sentinel 多样化的限流手段
  2. 如何所见即所得的配置规则
  3. 如何有效地使用 Sentinel 的监控数据
  4. 如何通过机器上报来管理机器

1. 下载 Demo jar

您可以 。

此 Demo Jar 主要包含的内容有:

  1. 本地 demo 客户端 中已有的 sentinel-core
  2. 接入 AHAS Sentinel 控制台所需的通信模块 ahas-sentinel-client,用于向控制台上报心跳信息。心跳信息、规则和监控均存于您个人的账号下,其它人均无法访问。
  3. 一个简单的 main 函数,程序类似于:

接下来您需要到 开通 AHAS 功能。可以根据 开通 AHAS 文档 和 里面的指引进行开通。

注意:本地运行接入 AHAS Sentinel 控制台需要在页面左上角选择 公网 环境。

开通后您可以点击左侧侧边栏的 流控降级,进入 Sentinel 控制台应用总览页面。在页面右上角,单击添加应用,选择 SDK 接入页签,到 配置启动参数 页签拿到需要的启动参数(详情请参考 SDK 接入文档),类似于:

    其中 project.name 配置项代表应用名(会显示在控制台), 配置项代表自己的授权 license(注意保密)。

    3. 启动 demo

    接下来我们就可以在本地启动 demo 了,启动应用时需要加上拿到的启动参数:

    1. java -Dproject.name=<AppName> -Dahas.license=<License> -jar ahas-sentinel-sdk-demo.jar

    当应用开始运行后一段时间,我们刷新一下控制台页面,就可以在 AHAS Sentinel 控制台上看到我们的应用了:

    image

    点击应用卡片,进入详情页面后点击左侧侧边栏的“机器列表”。我们可以在机器列表页面看到刚刚接入的机器,代表接入成功:

    我们可以在监控详情页面查看聚合监控和历史监控图线:

    AHAS Sentinel Dashboard

    AHAS Sentinel 控制台提供了一个我们推荐的推送规则的做法,即 配置中心控制台/Sentinel 控制台 → 配置中心 → Sentinel 数据源 → Sentinel,这样的流程就非常清晰了:

    详细介绍和使用文档可参考:。