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

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

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


image.pngDuplicateThrottlerHandler

@Slf4j
public class DuplicateThrottlerHandler implements MessageThrottlerHandler { 3
@Override
public boolean throttle(MessageThrottlerToken messageThrottlerToken, MessageThrottlerHandler- Context context) {
if (messageThrottlerToken.isThrottled()) { return false;
}
boolean throttleResult = context.throttle(messageThrottlerToken); messageThrottlerToken.markThrottled();
return throttleResult;
}
@Override
public boolean anyThrottle(List<MessageThrottlerToken> messageThrottlerTokens, MessageThrot- tlerHandlerContext context) {
if (CollectionUtils.isEmpty(messageThrottlerTokens)) { return false;
}
// 过滤掉已经被限流的消息
List<MessageThrottlerToken> needMessageThrottlerTokens = messageThrottlerTokens.stream()
.filter(messageThrottlerToken -> !messageThrottlerToken.isThrottled()).collect(Collectors.toList
());
if (CollectionUtils.isEmpty(needMessageThrottlerTokens)) {
return false;
  }
boolean throttleResult = context.anyThrottle(needMessageThrottlerTokens); needMessageThrottlerTokens.forEach(messageThrottlerToken -> messageThrottlerToken.mark-
Throttled());
return throttleResult;
}
@Override
public boolean allThrottle(List<MessageThrottlerToken> messageThrottlerTokens, MessageThrot-
tlerHandlerContext context) {
if (CollectionUtils.isEmpty(messageThrottlerTokens)) {


 

36

 

return false;

37

 

}

38

 

 

 

 

// 过滤掉已经被限流的消息

39

 

List<MessageThrottlerToken> needMessageThrottlerTokens = messageThrottlerTokens.stream()

40

 

.filter(messageThrottlerToken -> !messageThrottlerToken.isThrottled()).collect(Collectors.toList

41

());

 

if (CollectionUtils.isEmpty(needMessageThrottlerTokens)) { return false;
}
boolean throttleResult = context.allThrottle(needMessageThrottlerTokens);
needMessageThrottlerTokens.forEach(messageThrottlerToken -> messageThrottlerToken.mark-
Throttled());
return throttleResult;
  }
  }


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

相关文章
|
Java 测试技术 应用服务中间件
常见 Java 代码缺陷及规避方式(下)
常见 Java 代码缺陷及规避方式(下)
289 0
|
缓存 NoSQL Java
Java工具篇之Guava-cache内存缓存
常在业务系统中做开发,不会点高级知识点,有点不好意思了。在业务系统中,提高系统响应速度,提供系统高并发能力,其实方向很简单,三个方向,六个字而已: **缓存降级限流。** 当然这是在排除代码质量非常差的情况,如果代码质量很差,都是while循环和高内存占用,那么其实再怎么做都于事无补。除非你有一个马云爸爸,性能不够,机器来凑嘛。阿里云前来支持(1000台机器够了吗?)
1574 0
|
6月前
|
设计模式 算法 前端开发
【设计模式】【行为型模式】职责链模式(Chain of Responsibility)
一、入门 什么是职责链模式? 职责链模式是一种行为设计模式,它允许你将请求沿着一条链传递,直到有对象处理它为止。每个对象都有机会处理请求,或者将其传递给链中的下一个对象。 为什么需要职责链模式? 使用
257 16
|
8月前
|
设计模式 XML 算法
策略模式(Strategy Pattern)深度解析教程
策略模式属于行为型设计模式,通过定义算法族并将其封装为独立的策略类,使得算法可以动态切换且与使用它的客户端解耦。该模式通过组合替代继承,符合开闭原则(对扩展开放,对修改关闭)。
|
11月前
|
IDE 开发工具
【开发IDE升级】如何对IDEA版本进行升级
本文介绍了如何将 IntelliJ IDEA Ultimate 从 2020.2.2 版本升级到 2022.3.2 版本。主要内容包括准备工作、卸载旧版本和安装新版本的步骤。首先,从官网下载所需版本并备份旧版配置;接着,通过 Uninstall.exe 卸载旧版,保留配置和插件;最后,安装新版并完成激活。详细的操作步骤和截图帮助用户顺利完成升级过程。
12239 1
【开发IDE升级】如何对IDEA版本进行升级
|
缓存 Java Spring
Guava缓存工具类封装和使用
Guava缓存工具类封装和使用
394 0
|
存储 缓存 监控
性能利器Caffeine缓存全面指南
通过以上指南,您应该能够有效利用Caffeine缓存来优化您的Java应用程序。Caffeine的强大功能和灵活性,使它成为提升应用性能的理想选择。
819 4
|
监控 安全 Java
常见 Java 代码缺陷及规避方式(中)
常见 Java 代码缺陷及规避方式(中)
270 1
|
Java API Spring
常见 Java 代码缺陷及规避方式(上)
常见 Java 代码缺陷及规避方式(上)
379 0
|
存储 设计模式 算法
如何在业务代码中优雅地使用责任链模式
如何在业务代码中优雅地使用责任链模式
378 1