我正在寻找一个分布式排队系统,它支持延迟消息传递,也就是说,当生产者发送消息时,消费者只有在指定的延迟之后才会收到消息。sqs是我最熟悉的系统(尤其是可见性超时特性),但我所处的环境中aws是不受限制的。
我现在看到了一些选择,但没有一个是非常开胃的:
我对rabbitmq及其ttl特性不太熟悉,但如果遇到困难的话,我可能可以凑合起来解决这个问题。
有可能使用作业调度器而不是消息队列,但对于我的情况来说,这似乎是一个非常糟糕的阻抗不匹配。
我可以采用数据库作为队列的方法,但是有各种各样的原因我不想这样做。
所以我的问题是:有没有一个排队系统可以支持延迟的开箱即用的交付,而不必在上面分层一堆应用程序逻辑来让它工作?
1条答案
按热度按时间ca1c2owp1#
最近的kafka版本在每条消息上都默认有一个时间戳,您可以使用它来创建一个人工延迟的流。
只需创建一个kafkaconsumer,并在poll循环中检查时间戳是否至少为
n
几秒钟前。如果是的话,暂停循环几秒钟(我已经用了5秒钟才非常有效,但即使是一秒钟也可以处理大量的主题),然后继续正常处理。这将有效地暂停使用者,直到下一个要处理的记录“就绪”(即,足够旧),并且它将保持自我调节,始终保持它n
离实时还有几秒钟。javadoc上的更多信息
KafkaConsumer
:https://kafka.apache.org/20/javadoc/org/apache/kafka/clients/consumer/consumerrecord.html#timestamp--