带你读《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 等等)。
相关文章
|
7月前
|
存储 弹性计算 安全
阿里云特惠云服务器对比测评:2核2G3M99元与2核4G5M199元性能、适用场景及用户反馈
在阿里云目前的活动中,有两款价格非常实惠的云服务器,经济型e实例2核2G3M带宽40G ESSD Entry盘(99元/1年)和通用算力型u1实例2核4G5M带宽80G ESSD Entry盘(199元/1年),备受用户关注。本文将从多个维度对这两款云服务器进行详细对比评测,以供对比和选择参考。
544 1
|
8月前
|
SQL 移动开发 安全
从代码到用户:陪玩系统源码搭建方案与功能一览+小程序快速上线
购买成品源码,快速上线陪玩平台。流程包括选供应商、测试演示站、确认授权与环境、部署配置及上架运营。技术栈多为PHP+uni-app,支持多端覆盖。优点是成本低、周期短、功能成熟;缺点为易同质化,定制扩展需追加投入。需重视合规、安全与第三方服务选型。
498 1
|
8月前
|
Kubernetes 安全 Linux
Ansible基础——Ansible安全基线配置(一)
本系列教程旨在利用Ansible实现服务器与K8S安全基线的一键部署。开篇介绍Ansible工具及其核心概念,包括无代理架构、YAML剧本编写等,并通过实例演示如何快速构建自动化安全配置,助力运维高效、安全地管理基础设施。
410 3
|
7月前
|
人工智能 边缘计算 自然语言处理
2025年中国数字人企业介绍与数字人技术新标准及选择指南
数字人技术正从辅助迈向核心生产力。2025年,行业聚焦提效、降本与多场景适配。五类平台覆盖创作、教育、IP打造等需求,助力内容生态进入务实新阶段。
|
运维 监控 关系型数据库
从崩溃到高可用:基于DAS自治服务的RDS全链路故障自愈实战
本文分享了基于DAS自治服务实现RDS全链路故障自愈的实战经验。通过三级健康检查、智能决策引擎与幂等执行器,构建高可用数据库系统,显著提升故障恢复效率,降低业务中断风险,助力企业实现稳定可靠的数据库服务运维。
388 11
|
12月前
|
缓存 前端开发 API
API赋能开发:效率、性能与协作的三重跃升
本文深入解析了现代API开发的核心实践,涵盖接口设计、性能优化与前后端分离协作新模式,助力开发者提升效率,实现团队协同开发。
|
PHP
2025简约的打赏系统PHP网站源码
2025简约的打赏系统PHP网站源码
458 20
|
Web App开发 测试技术 API
使用Ollama和Botnow本地部署DeepSeek R1模型的对比分析
本文详细对比了使用Ollama和Botnow两种方式在本地运行DeepSeek R1等开源大模型的不同。通过Ollama,用户可以在个人电脑(如MacBook Pro)上快速部署和测试模型;而Botnow则提供了企业级的API接入和本地部署方案,支持更复杂的应用场景。具体步骤包括环境准备、模型下载与运行、图形化界面操作等,帮助用户选择最适合自己的方式体验大模型的强大功能。
1053 0
|
人工智能 自然语言处理 前端开发
从文案到设计,我用通义版Artifacts生成了365张灵感日历
本文介绍了如何利用通义AI的“代码模式”功能,轻松制作个性化日历。作者通过实例展示了从设计日历样式、推荐每日生活小事到赋予小事新解的过程,强调了AI在创意实现上的强大助力。此外,还探讨了AI代码生成技术对未来创造力的影响,以及通义AI代码模式如何降低创作门槛,提高效率,让每个人都能成为应用开发者。
|
安全 网络协议 数据安全/隐私保护
访问控制(ACL)原理详解
访问控制(ACL)原理详解
1173 0
访问控制(ACL)原理详解

热门文章

最新文章