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

营销型网站建设用途请专业做网站的老师

营销型网站建设用途,请专业做网站的老师,昆明网站seo多少钱,住房和城乡建设部网站报名文章目录 前言一、注解埋点支持二、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://www.yayakq.cn/news/756845/

相关文章:

  • 网站推广方案编写廊坊建设质量监督局网站
  • 南通做网站的公司沈阳专业网站制作团队
  • 网站做好了 后期怎么做什么是电子商务?
  • 做明信片的网站高端网站推广
  • 请问下网站开发怎么弄电影院网站建设方案
  • 四川手机网站设计方案wordpress修改标签
  • 个人网站制作多少钱怎么添加字体到电脑wordpress
  • 游戏网页设计模板优化网站排名
  • 旅游网站建设目的西安网站托管排名
  • 帝国织梦wordpress网站seo文章
  • 哇哈哈网站建设策划书电子工程王北辰
  • 建设一个网站引言彩页设计费多少
  • 建设招标网是什么网站要建设一个网站需要什么手续
  • 网站接入查询网上工作平台
  • 成都网站建设培训哪家好seo推广外包企业
  • 网站开发方向的工作代发货网站系统建设
  • 广东移动宽带官网站哪个网站的域名到期直接注册表
  • 域名解析网站什么意思百度右边相关网站
  • 平度城乡建设局网站嵌入式网站开发学习
  • 南京建设厅官方网站企业网站策划论文
  • 宣城网站建设价格成都软件培训机构排名前十
  • 中关村能力建设网站东莞市企业招聘信息网
  • 建设招标网官方网站做网站多少钱赚钱吗
  • 常州微信网站建设效果宁波哪里有网站建设
  • 制作网站怎么用图片做背景wordpress音乐主题musik汉化
  • 众筹网站开发价格网站上的付费文章怎么做
  • 江西网站制作小程序软件开发哪家好
  • 郑州区块链数字钱包网站开发公司竞价推广账户托管费用
  • 学校局域网站建设广告网站模板下载不了
  • 做网站公司赚钱吗免费全部游戏大全