我有以下系统:
producer ---> proxy ---> consumer
<good> 10 msg/s
生成消息的生产者
- 10 msg/second
。将 bool
值返回给 consumer
的 proxy
取决于生产者生成的消息数量,如果它生成超过 10
,代理返回 false
。
这是时间戳
:
0.1 0.2 0.25 0.26 0.27 0.28 0.29 0.30 0.31 0.32 0.33 0.34 2.0 2.1 2.2
出现在 0.1、0.2、0.25 ... 0.32 的消息它们是 good
我们返回 true
,0.32 是坏的,因为它是 1 秒内的第 11 条消息,所以我们返回 false
。
这是一个原型(prototype):
bool shouldProxyAcceptMessage(float timestamp)
如何实现这个算法?
最佳答案
好的,我根据 OP 的评论修改了解决方案。该算法使用两个全局变量,nrMessages
和 startTime
, 并初始化 startTime
到当前时间每当 nrMessage==0
(即当它收到第一条消息时);对于在 1 秒内到达的前 10 个时间戳,它返回 true。一旦收到早于 1 秒的时间戳,它就会重置 nrMessages=0
(因此 startTime
将在下一个时间戳到达时重新初始化)。
我们的隐含假设
long nrMessages = 0; // global variable
long startTime = 0;
boolean shouldProxyAcceptMessage(long timestamp) {
if (nrMessages++ == 0) {
startTime = System.currentTimeMillis()();
}
timeDiff = timestamp-startTime;
if (timeDiff > 1000) {
nrMessages = 0;
return false;
} else {
return nrMessages <= 10;
}
}
关于algorithm - 如何处理经常生成的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36331085/