Algorithm 如何处理经常生成的消息?
我有以下系统:Algorithm 如何处理经常生成的消息?,algorithm,data-structures,Algorithm,Data Structures,我有以下系统: producer ---> proxy ---> consumer <good> 10 msg/s 如何实现该算法?好的,我根据OP的意见调整了解决方案。该算法使用两个全局变量nrMessage和startTime,每当nrMessage==0时,即当它收到第一条消息时,它将startTime初始化为当前时间;对于1秒内到达的前10个时间戳,它返回true。一旦收到超过1秒的时间戳,它将重置nrMessages=0,以便在下一个时间戳到
producer ---> proxy ---> consumer
<good> 10 msg/s
如何实现该算法?好的,我根据OP的意见调整了解决方案。该算法使用两个全局变量nrMessage和startTime,每当nrMessage==0时,即当它收到第一条消息时,它将startTime初始化为当前时间;对于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;
}
}
@Anatoly,记住第一条消息生成的时间就足够了吗?@Anatoly我现在只在一秒钟内返回前10个时间戳的true。这就是您的意图吗?当timestamp==2.0或大于1.0时,情况如何?当第一秒结束时,我们必须更新NRMessages,如果timeDiff>1秒{,您的意思是什么?您什么时候开始再次返回true?
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;
}
}