当前位置 博文首页 > java1234的博客:Sentinel返回布尔值方式定义资源

    java1234的博客:Sentinel返回布尔值方式定义资源

    作者:[db:作者] 时间:2021-06-06 17:24

    完整目录清单页面(必看)

    资源是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。在接下来的文档中,我们都会用资源来描述代码块。

    只要通过 Sentinel API 定义的代码,就是资源,能够被 Sentinel 保护起来。大部分情况下,可以使用方法签名,URL,甚至服务名称作为资源名来标示资源。

    Sentinel 可以简单的分为 Sentinel 核心库和 Dashboard。核心库不依赖 Dashboard,但是结合 Dashboard 可以取得最好的效果。

    我们说的资源,可以是任何东西,服务,服务里的方法,甚至是一段代码。使用 Sentinel 来进行资源保护,主要分为几个步骤:

    1. 定义资源
    2. 定义规则
    3. 检验规则是否生效

    先把可能需要保护的资源定义好(埋点),之后再配置规则。也可以理解为,只要有了资源,我们就可以在任何时候灵活地定义各种流量控制规则。在编码的时候,只需要考虑这个代码是否需要保护,如果需要保护,就将之定义为一个资源。

    对于主流的框架,我们提供适配,只需要按照适配中的说明配置,Sentinel 就会默认定义提供的服务,方法等为资源。

    SphO 提供 if-else 风格的 API。用这种方式,当资源发生了限流之后会返回 false,这个时候可以根据返回值,进行限流之后的逻辑处理。示例代码如下:

      // 资源名可使用任意有业务语义的字符串
      if (SphO.entry("自定义资源名")) {
        // 务必保证finally会被执行
        try {
          /**
          * 被保护的业务逻辑
          */
        } finally {
          SphO.exit();
        }
      } else {
        // 资源访问阻止,被限流或被降级
        // 进行相应的处理操作
      }
    

    注意SphO.entry(xxx) 需要与 SphO.exit()方法成对出现,匹配调用,位置正确,否则会导致调用链记录异常,抛出ErrorEntryFreeException` 异常。

    实例:

    /**
     * 返回布尔值方式定义资源
     * @return
     */
    @RequestMapping("helloWorld2")
    public String helloWorld2(){
    	// 资源名可使用任意有业务语义的字符串
    	if (SphO.entry("HelloWorld2")) {
    		// 务必保证finally会被执行
    		try {
    			/**
    			 * 被保护的业务逻辑
    			 */
    			return "Sentinel 大爷你好!boolean"+System.currentTimeMillis();
    		} finally {
    			SphO.exit();
    		}
    	} else {
    		// 资源访问阻止,被限流或被降级
    		// 进行相应的处理操作
    		return "系统繁忙,请稍后!";  // 降级处理
    	}
    }
    

    sentinel控制台添加流控规则:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nt4ObaoX-1621424167485)(image-20210519164515203.png)]

    访问 http://localhost/helloWorld2

    正常访问显示:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-frNoET4i-1621424167494)(image-20210519164603280.png)]

    如果频繁访问会出现:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PRw6BNqH-1621424167499)(image-20210519164633277.png)]

    触碰降级规则,返回降级信息;

    微信搜一搜【java1234】关注这个放荡不羁的程序员,关注后回复【资料】有我准备的一线大厂笔试面试资料以及简历模板。