带你读《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 等等)。
相关文章
|
网络协议 网络架构
网络TCP/IP基础(IP地址网络汇总与规划)
网络汇总、汇总方法、汇总案例、要求、过程、其它方法、注意事项、汇总扩展、IP地址规划及应用、IP地址规划的案例、规划原则、规划案例、规划过程、注意事项、IP地址规划的应用、规划应用案例、规划思路、规划应用过程、其它规划
2115 1
网络TCP/IP基础(IP地址网络汇总与规划)
|
物联网
通过微信小程序体验阿里云IoT物联网平台
通过微信小程序体验阿里云IoT物联网平台
10341 0
|
3月前
|
Web App开发 人工智能 Cloud Native
一人买多用不完,多人分享被封号——"Key池化"破解 AI 订阅共享困局
Claude用户面临“独用浪费、共享封号”困局:Max 20x额度闲置,多人拼车却因IP跳变、指纹泄露等触发风控。Key池化方案通过本地代理+虚拟Key分发,实现额度共享而不共号,规避风控,降低成本(3人仅$200/月),提升安全与体验。
716 7
|
3月前
|
人工智能 缓存 自然语言处理
阿里云百炼Token Plan团队版:多模型兼容、团队管理与Credits计费全攻略
阿里云Token Plan(团队版)是阿里云百炼平台面向企业、团队及一人公司推出的AI大模型订阅服务,以Credits为统一计量单位,整合文本生成、图像生成等多模态模型能力,兼容主流AI编程与智能体工具,提供团队管理、预算管控、数据安全等企业级能力,解决团队规模化使用大模型时的成本失控、模型单一、协作不便等痛点。2026年,该服务已完成多轮迭代,模型覆盖更全面、工具兼容性更强、团队管理功能更精细化,成为企业落地AI生产力的核心订阅方案之一。
373 0
阿里云百炼Token Plan团队版:多模型兼容、团队管理与Credits计费全攻略
|
9月前
|
机器学习/深度学习 数据采集 算法
Python | K折交叉验证的参数优化的GradientBoost及SHAP可解释性分析回归预测算法
本教程介绍基于Python的GradientBoost回归预测算法,结合K折交叉验证与贝叶斯/随机/网格搜索进行超参数优化,并引入SHAP实现模型可解释性分析。涵盖数据预处理、模型训练、多维度评估及可视化,适用于地球科学、医学、工程、经济等多个领域的连续变量预测任务,代码与数据齐全,适合科研与实际应用。
614 2
|
6月前
|
人工智能 编解码 搜索推荐
当所有简历都能被 AI 写漂亮之后:招聘行业真正该如何使用 AI
AI正加速将简历等传统信号“同质化”——人人能写漂亮简历,却难保真实;表达更流畅,但判断力未提升。当AI从“差异化能力”变为招聘基础设施(2025年渗透率达77%),行业核心矛盾已转向**信息损耗、流程损耗与信任损耗**。未来胜负手不在美化表达,而在重建可验证的信号系统、可追踪的行为链路与可信赖的结果闭环。(239字)
503 11
|
9月前
|
JSON JavaScript 前端开发
Node.js 快速上手指南
Node.js 是基于 Chrome V8 引擎的 JavaScript 运行时,让 JS 脱离浏览器运行在服务端。支持异步 I/O、跨平台,适用于构建后端 API、CLI 工具与全栈应用。本指南涵盖安装、核心模块(fs、http、path、events)、NPM 包管理、Express 实战及文件上传示例,零基础也能快速上手,掌握 Node.js 核心开发技能。
|
调度 容器 Perl
Nvidia GPU如何在Kubernetes 里工作
# Nvidia GPU如何在Kubernetes 里工作 本文介绍Nvidia GPU设备如何在Kubernetes中管理调度。 整个工作流程分为以下两个方面: * 如何在容器中使用GPU * Kubernetes 如何调度GPU ### 如何在容器中使用GPU 想要在容器中的应用可以操作GPU, 需要实两个目标 1.
4567 0
|
JavaScript Shell Linux
通过SNMP统计网络设备资产信息
通过SNMP统计网络设备资产信息
通过SNMP统计网络设备资产信息
|
网络协议 Linux Go
[WUSTCTF2020]level4题解
[WUSTCTF2020]level4题解
490 0
[WUSTCTF2020]level4题解