我正在实现一个解决方案,该解决方案将以可变的时间间隔延迟消息,并在消息过期时释放它们。
所以,一条消息到达,应该延迟5秒,然后我会将它们延迟5秒。然而,如果消息延迟15秒到达,我会把它们放在15秒的桶里。
我正在考虑使用优先级队列。
实现看起来像:
PriorityQueue<ReleaseCondition> queue = new PriorityQueue<>(1000, new TimeComparator());
Declare
Class TimeComparator implements Comparator<MessageRelease> {
public int compare(MessageRelease m1, MessageRelease m2) {
if (m1.timestamp < m2.timestamp) {
return 1;
} else if (m1.timestamp > m2.timestamp) {
return -1;
}
return 0;
}
}
对我来说,当我使用随机延迟时,我看到了这一点,我看到前面最古老的消息。我的想法是从前面阅读所有消息,并在它们符合过期政策时将其删除。
想看看这是否是一种愚蠢的方法。我正在写测试,但在想我是否应该使用更现成的产品。
本次讨论中也讨论了此主题。基于时间的线程安全优先级队列
您的方法是讨论中定义的两种方法之一。优先级队列将允许您始终将最先过期的消息放在队列前面。由于它总是有序的,它将满足您所描述的目的。
好的实现代码。