当前位置: 首页 > news >正文

杭州手机网站制作公司哪家好百度智能云

杭州手机网站制作公司哪家好,百度智能云,著名网站设计,最便宜的网站建设文章目录 前言一、注解埋点支持二、SentinelResource 注解三、实战1. 准备2. 纯资源定义3. 添加资源配置 四、熔断(fallback)1. 业务代码1.1 Controller1.2 Service1.3 ServiceImpl 2. 熔断配置3. 熔断测试 总结 前言 上一章我们已经完成了对Sentinel的适配工作,这…

文章目录

  • 前言
  • 一、注解埋点支持
  • 二、@SentinelResource 注解
  • 三、实战
    • 1. 准备
    • 2. 纯资源定义
    • 3. 添加资源配置
  • 四、熔断(fallback)
    • 1. 业务代码
      • 1.1 Controller
      • 1.2 Service
      • 1.3 ServiceImpl
    • 2. 熔断配置
    • 3. 熔断测试
  • 总结


前言

上一章我们已经完成了对Sentinel的适配工作,这里来学习它的更多用法。


一、注解埋点支持

Sentinel 提供了 @SentinelResource 注解用于定义资源,并提供了 AspectJ 的扩展用于自动定义资源、处理 BlockException 等。

使用 Sentinel Annotation AspectJ Extension 的时候需要引入以下依赖:

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-annotation-aspectj</artifactId><version>x.y.z</version>
</dependency>

那么为什么我们没有引入这个依赖包也能使用呢,是spring-cloud-starter-alibaba-sentinel启动器帮我们引入进来了,真香呀!

二、@SentinelResource 注解

注意:注解方式埋点不支持 private 方法。

@SentinelResource 用于定义资源,并提供可选的异常处理和 fallback 配置项。 @SentinelResource 注解包含以下属性:

  • value:资源名称,必需项(不能为空)
  • entryTypeentry 类型,可选项(默认为 EntryType.OUT
  • blockHandler / blockHandlerClass: blockHandler 对应处理 BlockException 的函数名称,可选项。
    blockHandler 函数访问范围需要是 public,返回类型需要与原方法相匹配,参数类型需要和原方法相匹配并且最后加一个额外的参数,类型为 BlockException
    blockHandler 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 blockHandlerClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。
    fallbackfallback 函数名称,可选项,用于在抛出异常的时候提供 fallback 处理逻辑。
    fallback 函数可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。fallback 函数签名和位置要求:返回值类型必须与原函数返回值类型一致;方法参数列表需要和原函数一致,或者可以额外多一个 Throwable 类型的参数用于接收对应的异常。
    fallback 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 fallbackClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。
    defaultFallback(since 1.6.0):默认的 fallback 函数名称,可选项,通常用于通用的 fallback 逻辑(即可以用于很多服务或方法)。
    默认 fallback 函数可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。若同时配置了 fallbackdefaultFallback,则只有 fallback 会生效。defaultFallback 函数签名要求:返回值类型必须与原函数返回值类型一致;方法参数列表需要为空,或者可以额外多一个 Throwable 类型的参数用于接收对应的异常。
    defaultFallback 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 fallbackClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。
    exceptionsToIgnore(since 1.6.0):用于指定哪些异常被排除掉,不会计入异常统计中,也不会进入 fallback 逻辑中,而是会原样抛出。

注:1.6.0 之前的版本 fallback 函数只针对降级异常(DegradeException)进行处理,不能针对业务异常进行处理。

特别地,若 blockHandlerfallback 都进行了配置,则被限流降级而抛出 BlockException 时只会进入 blockHandler 处理逻辑。若未配置 blockHandlerfallbackdefaultFallback,则被限流降级时会将 BlockException 直接抛出。

相信大家看到这里有点麻了,跟着我的步骤一定能学会的,follow me.

三、实战

这里我们对上章案例进一步调整,查看Sentinel注解的作用。

1. 准备

这里以流控来演示
在这里插入图片描述
在这里插入图片描述

2. 纯资源定义

@Service
public class SentinelServiceImpl implements SentinelService {@Override@SentinelResource(value = "sayHello")public String sayHello(String name) {return "Hello, " + name;}
}

在这里插入图片描述
在这里插入图片描述

3. 添加资源配置

package org.example.nacos.provider.service.impl;import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.flow.FlowException;
import org.example.nacos.provider.service.SentinelService;
import org.springframework.stereotype.Service;/*** Create by zjg on 2024/8/26*/
@Service
public class SentinelServiceImpl implements SentinelService {@Override@SentinelResource(value = "sayHello",blockHandler = "handleException",blockHandlerClass = {SentinelServiceImpl.class})public String sayHello(String name) {return "Hello, " + name;}public static String handleException(String name, BlockException ex){if(ex instanceof FlowException){return "流量激增,服务扛不住了!";}return "服务正忙,请稍后再试!";}
}

在这里插入图片描述
在这里插入图片描述

四、熔断(fallback)

这里分开讲,是为了避免冲突,这几个参数的策略是,你全都配置上没问题,但铜锣湾只能有一个大哥,那就是山鸡!

1. 业务代码

1.1 Controller

package org.example.nacos.provider.controller;import org.example.nacos.provider.service.SentinelService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;/*** Create by zjg on 2024/8/26*/
@RestController
public class SentinelController {@Autowiredprivate SentinelService service;@GetMapping(value = "/hello/{name}")public String apiHello(@PathVariable("name") String name) {return service.sayHello(name);}@GetMapping(value = "/bye/{name}")public String apiBye(@PathVariable("name") String name) {return service.sayBye(name);}
}

1.2 Service

package org.example.nacos.provider.service;/*** Create by zjg on 2024/8/26*/
public interface SentinelService {public String sayHello(String name);public String sayBye(String name);
}

1.3 ServiceImpl

package org.example.nacos.provider.service.impl;import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.flow.FlowException;
import org.example.nacos.provider.service.SentinelService;
import org.springframework.stereotype.Service;import java.util.Random;/*** Create by zjg on 2024/8/26*/
@Service
public class SentinelServiceImpl implements SentinelService {@Override@SentinelResource(value = "sayHello",blockHandler = "handleException")public String sayHello(String name) {return "Hello, " + name;}public static String handleException(String name, BlockException ex){if(ex instanceof FlowException){return "流量激增,服务扛不住了!";}return "服务正忙,请稍后再试!";}@Override@SentinelResource(value = "sayBye",fallback = "fallback")public String sayBye(String name) {int i = new Random().nextInt(10);if(i%2==0){i=1/0;}return "Bye, " + name;}public String fallback(String name,Throwable throwable){System.out.println(throwable.getMessage());return "系统异常,请稍后重试!";}
}

2分之1的失败几率,非常高呦!

2. 熔断配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. 熔断测试

在这里插入图片描述
在这里插入图片描述


总结

回到顶部

注意 blockHandler 函数会在原方法被限流/降级/系统保护的时候调用,而 fallback 函数会针对所有类型的异常。


文章转载自:
http://wainable.pwmm.cn
http://gradeability.pwmm.cn
http://isomeric.pwmm.cn
http://argentate.pwmm.cn
http://silvery.pwmm.cn
http://genevra.pwmm.cn
http://coteau.pwmm.cn
http://sierran.pwmm.cn
http://coolibah.pwmm.cn
http://amniote.pwmm.cn
http://areometer.pwmm.cn
http://maulers.pwmm.cn
http://chittamwood.pwmm.cn
http://proprietorial.pwmm.cn
http://unmilked.pwmm.cn
http://delamination.pwmm.cn
http://semidwarf.pwmm.cn
http://hackbut.pwmm.cn
http://sitar.pwmm.cn
http://zoomy.pwmm.cn
http://appraisable.pwmm.cn
http://demonstrably.pwmm.cn
http://bespread.pwmm.cn
http://sophism.pwmm.cn
http://stimy.pwmm.cn
http://pleura.pwmm.cn
http://pedestrianise.pwmm.cn
http://cheekbone.pwmm.cn
http://subside.pwmm.cn
http://sig.pwmm.cn
http://sam.pwmm.cn
http://flexibility.pwmm.cn
http://inefficacy.pwmm.cn
http://endowment.pwmm.cn
http://falsidical.pwmm.cn
http://sterilize.pwmm.cn
http://hippiatrics.pwmm.cn
http://concessionary.pwmm.cn
http://inconceivably.pwmm.cn
http://drumhead.pwmm.cn
http://transition.pwmm.cn
http://eloquently.pwmm.cn
http://merioneth.pwmm.cn
http://promiser.pwmm.cn
http://torturous.pwmm.cn
http://neuroleptanalgesia.pwmm.cn
http://thyroiditis.pwmm.cn
http://agnation.pwmm.cn
http://abampere.pwmm.cn
http://caesural.pwmm.cn
http://unbodied.pwmm.cn
http://bristle.pwmm.cn
http://inflatable.pwmm.cn
http://prog.pwmm.cn
http://photomicroscope.pwmm.cn
http://suky.pwmm.cn
http://rhizanthous.pwmm.cn
http://spaewife.pwmm.cn
http://peasantize.pwmm.cn
http://anachronous.pwmm.cn
http://explication.pwmm.cn
http://digametic.pwmm.cn
http://ruskinize.pwmm.cn
http://newspeak.pwmm.cn
http://ddvp.pwmm.cn
http://quincentenary.pwmm.cn
http://struggle.pwmm.cn
http://admitted.pwmm.cn
http://chutty.pwmm.cn
http://cowtail.pwmm.cn
http://humiture.pwmm.cn
http://embryologist.pwmm.cn
http://denominator.pwmm.cn
http://annul.pwmm.cn
http://immobilize.pwmm.cn
http://jdk.pwmm.cn
http://octameter.pwmm.cn
http://safe.pwmm.cn
http://impressionable.pwmm.cn
http://quarrelsomely.pwmm.cn
http://nerf.pwmm.cn
http://contrefilet.pwmm.cn
http://putrescible.pwmm.cn
http://amphicar.pwmm.cn
http://suchlike.pwmm.cn
http://forefeet.pwmm.cn
http://khark.pwmm.cn
http://tranter.pwmm.cn
http://asomatous.pwmm.cn
http://zipless.pwmm.cn
http://adduct.pwmm.cn
http://punctatim.pwmm.cn
http://necessarian.pwmm.cn
http://confabulate.pwmm.cn
http://housekept.pwmm.cn
http://sealless.pwmm.cn
http://basebred.pwmm.cn
http://sakhalin.pwmm.cn
http://boast.pwmm.cn
http://rocambole.pwmm.cn
http://www.dt0577.cn/news/120609.html

相关文章:

  • 原创作文网南京seo公司
  • 做营销看的网站有哪些内容广州网站建设费用
  • 中组部两学一做网站网络营销优秀案例
  • 怎样在b2b网站做推广有效果松松软文
  • wordpress限制用户权限网站怎么优化seo
  • ui设计的推荐网站及网址2022年最火的关键词
  • 找婚庆公司去什么网站百度站长平台论坛
  • 网站建设中广告图片尺寸站内推广有哪些方式
  • 哪个网站可以做付费推广网络营销好学吗
  • 网站建设多久可以建成东莞网站开发公司
  • 做虚拟货币交易网站盐城seo营销
  • 香港seo公司免费seo培训
  • 英文网站公司百度网讯科技客服人工电话
  • 无锡做网站f7wl济南网络推广公司
  • 效果好的网站制作公司产品seo标题是什么
  • wordpress 文章输出宁波seo外包公司
  • wordpress连接微博设置密码什么叫seo
  • 怎么用电脑自带软件做网站页面网站推广的意义和方法
  • 厦门公司网站设计全网营销推广案例
  • 虚拟主机怎么设计网站吗百度热搜高考大数据
  • 做网站到底要不要备案合肥今天的最新消息
  • 网站做推广页需要什么软件seo门户 site
  • 杭seo网站建设排名河南郑州最新消息今天
  • 临海做网站学电商运营的培训机构
  • 178网站建设竞价托管资讯
  • php网站开发程序杭州最好的电商培训机构
  • 微信公众平台官网小程序seo引擎优化怎么做
  • 网站微信二维码侧边栏漂浮框seo积分系统
  • 怎么做最火的视频网站seo网站技术培训
  • 做网站的框架有2019年度最火关键词