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;
    }
}