在开发通知中心时,我们希望向用户推送新生成的通知(但是,通知的生成速度非常快,因此我们希望使用throttle方法(lodash中的一个术语,或者参见此可视化)。我们将限制“通知生成”事件。
可视化:x轴是时间。第一个蓝行是生成的通知,当然不一定是相同的时间间隔。红色行是限制的事件(忽略绿色)
问题是如何实现这一点。我们有一个简单的解决方案如下:
每当生成通知时,将一个“延迟的任务”排队到kafka中,其中delay=throttletime。
当Kafka向我们传递一个延迟的信息时,请查看 lastActionTimestamp
在redis。如果 currentTimestamp - lastActionTimestamp < throttleTime
,这意味着此消息应该被丢弃。否则,执行操作,并更新 lastActionTimestamp
在redis中是当前时间。
我觉得有点复杂。那么有没有更好或更简单的方法呢?或者有图书馆吗?谢谢!
免责声明:这不是常见的“节流”——不想限制某些用户操作或微服务调用的速率。
暂无答案!
目前还没有任何答案,快来回答吧!