优先级队列,用于处理队列上需要定时释放的消息



我正在实现一个解决方案,该解决方案将以可变的时间间隔延迟消息,并在消息过期时释放它们。

所以,一条消息到达,应该延迟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;
}
}

对我来说,当我使用随机延迟时,我看到了这一点,我看到前面最古老的消息。我的想法是从前面阅读所有消息,并在它们符合过期政策时将其删除。

想看看这是否是一种愚蠢的方法。我正在写测试,但在想我是否应该使用更现成的产品。

本次讨论中也讨论了此主题。基于时间的线程安全优先级队列

您的方法是讨论中定义的两种方法之一。优先级队列将允许您始终将最先过期的消息放在队列前面。由于它总是有序的,它将满足您所描述的目的。

好的实现代码。

最新更新