带你读《2022技术人的百宝黑皮书》——一个搞定责任链的注解(10)

简介: 带你读《2022技术人的百宝黑皮书》——一个搞定责任链的注解(10)

带你读《2022技术人的百宝黑皮书》——一个搞定责任链的注解(9)https://developer.aliyun.com/article/1339669?groupCode=taobaotech


image.png消息限流代理

/**
* 消息限流代理
  */
@Slf4j
public class MessageThrottlerProxy { 
@Autowired
private AcquireThrottlerHandler acquireThrottlerHandler;
private MessageThrottler messageThrottler; 
@PostConstruct
public void init() {
messageThrottler = new MessageThrottlerPipeline()
.addLast(new ClassificationThrottlerHandler())
.addLast(new DuplicateThrottlerHandler())
.addLast(acquireThrottlerHandler); 
}
  /**
  * 限流单个消息
  *
* @param messageThrottlerToken 单个消息令牌
* @return 是否限流成功24  */
public boolean throttle(MessageThrottlerToken messageThrottlerToken) {
if (!SendSwitch.ENABLE_API_THROTTLER) {
return false;
  }
try {
boolean throttled = messageThrottler.throttle(messageThrottlerToken);
return SendSwitch.THROTTLER_ONLY_WATCH ? false : throttled;
} catch (Exception e) {
log.error("Failed to throttle messageSendDTO:" + messageThrottlerToken, e);
// throttle内部异常不应该影响正常请求,遇到此情况直接降级限流通过
return false;
  }
  }
  /**
  * 限流多个消息, 合并策略可通过 {@link SendSwitch#THROTTLER_MERGE_STRATEGY} 开关控制
  *
* @param messageThrottlerTokens 多个消息令牌
* @return 是否限流成功44  */
public boolean throttle(List<MessageThrottlerToken> messageThrottlerTokens) {
if (!SendSwitch.ENABLE_API_THROTTLER) {
return false;
  }
if (CollectionUtils.isEmpty(messageThrottlerTokens)) {
return false;
  }
  MergeStrategy mergeStrategy = MergeStrategy.getByName(SendSwitch.THROT- TLER_MERGE_STRATEGY);
if (mergeStrategy == null) {
log.error("illegal throttler mergeStrategy:" + SendSwitch.THROTTLER_MERGE_STRATEGY);
return false;
  }
try {
boolean throttled = mergeStrategy.throttle(messageThrottler, messageThrottlerTokens);
return SendSwitch.THROTTLER_ONLY_WATCH ? false : throttled;
} catch (Exception e) {
log.error("Failed to throttle messageSendDTO:" + messageThrottlerTokens, e);
// throttle内部异常不应该影响正常请求,遇到此情况直接降级限流通过
return false;
  }
  }
public enum MergeStrategy {
ALL {
@Override
  public boolean throttle(MessageThrottler messageThrottler, List<MessageThrottlerToken> messageThrottlerTokens) {
return messageThrottler.allThrottle(messageThrottlerTokens); 
}
  },
ANY {
@Override
  public boolean throttle(MessageThrottler messageThrottler, List<MessageThrottlerToken> messageThrottlerTokens) {
return messageThrottler.anyThrottle(messageThrottlerTokens);
}
}
public static MergeStrategy getByName(String name) { MergeStrategy[] values = values();
for (MergeStrategy value : values) {
if (value.name().equalsIgnoreCase(name)) { return value;
}
}
return null;
}
public abstract boolean throttle(MessageThrottler messageThrottler, List<MessageThrottlerToken> messageThrottlerTokens);
}
}


ps: 相关类并未全部列出,仅展示主要逻辑

 

团队介绍

 

欢迎加入淘宝移动技术中台,团队成员大牛云集,有阿里移动中间件的创始人员、鹰眼全链路追踪平台核心成员、更有一群热爱技术,期望用技术推动业务的小伙伴。

淘宝移动技术中台,推进大淘宝技术(淘宝、天猫等)架构升级,致力于为淘系、整个集团提供基础核心能力、产品与解决方案:

  1. 业务高可用的解决方案与核心能力(应用高可用:为业务提供自适应限流、隔离与熔断的柔性高可用解决方案, 站点高可用:故障自愈、多机房与异地容灾与快速切流恢复);
  2. 新一代的业务研发模式FaaS(一站式函数研发Gaia平台);
  3. 下一代网络协议QUIC实现与落地;
  4. 移动中间件(API网关MTop、域名调度AMDC、消息/推送、文件上传AUS、移动配置推送Orange 等等)。
相关文章
|
Java 数据库
Shiro识别多种用户进行登录
Shiro识别多种用户进行登录
|
自然语言处理 Java 大数据
阿里云自然语言处理--文本纠错(中文)Java 调用示例
自然语言处理(Natural Language Processing,简称NLP),是为各类企业及开发者提供的用于文本分析及挖掘的核心工具,旨在帮助用户高效的处理文本,已经广泛应用在电商、文娱、司法、公安、金融、医疗、电力等行业客户的多项业务中,取得了良好的效果。文本纠错产品是基于海量大数据研发,为有文本纠错需求的产品提供服务。能够准确识别输入文本中出现的拼写错别字及其段落位置信息,并针对性给出正确的建议文本内容。本文将使用Java CommonSDK演示文本纠错(中文)服务的快速调用以供参考。
1650 0
阿里云自然语言处理--文本纠错(中文)Java 调用示例
|
前端开发 架构师 Java
基于Springboot实现漫画网站平台
本项目基于Springboot实现开发了一个漫画主题的网站,实现了一个比漂亮的动漫连载的网站系统。前端用户注册登陆后可以在线查看漫画连载信息等,对个人信息进行管理等操作。后台管理用户登陆后可以实现用户管理,动漫管理,反馈管理,更新预告管理,漫画排行管理等相关功能模块,界面设计优雅大方,比较适合做毕业设计和课程设计使用。
568 0
基于Springboot实现漫画网站平台
|
数据处理
基于51单片机的无线充电器设计与实现
无线电能传输技术是一种新的能量传输技术,其主要功能是共振耦合的无线电能传输,其传输效率高,适合中等传输距离,基于磁场与共振耦合原理,可有效地将电能传输至负荷,从而解决了传统电力传输模式存在的诸多弊端。本论文以单片机为核心,利用无线充电线圈的电磁感应原理,对移动电话进行充电。首先,在参考国内外有关资料的基础上,对整个无线充电设备的总体设计进行了研究,确定了各模块的功能,并对其进行了硬件电路的设计和构建。在此基础上,编写了单片机的控制软件,完成了各部分的控制,并完成了实际的焊接和试验,并完成了以单片机为核心的无线充电设备的系统设计。
353 0
|
存储 NoSQL Java
你不知道的Redis SET NX 指令不保障原子性的应对之法
你不知道的Redis SET NX 指令不保障原子性的应对之法
514 0
|
SQL 消息中间件 缓存
从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(五) SEATA分布式事务篇(中)shardingshere 多库读写分离/分库分表下分布式事务完整代码及案例
从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(五) SEATA分布式事务篇(中)shardingshere 多库读写分离/分库分表下分布式事务完整代码及案例
从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(五) SEATA分布式事务篇(中)shardingshere 多库读写分离/分库分表下分布式事务完整代码及案例
|
前端开发 定位技术
高德地图进阶开发实战案例(9):涟漪动画标注的实现方案
高德地图进阶开发实战案例(9):涟漪动画标注的实现方案
185 0
|
JavaScript
vue使用中的问题总结
vue使用中的问题总结

热门文章

最新文章