sqs风格的分布式延迟队列,但在aws之外?

niwlg2el  于 2021-06-06  发布在  Kafka
关注(0)|答案(1)|浏览(398)

我正在寻找一个分布式排队系统,它支持延迟消息传递,也就是说,当生产者发送消息时,消费者只有在指定的延迟之后才会收到消息。sqs是我最熟悉的系统(尤其是可见性超时特性),但我所处的环境中aws是不受限制的。
我现在看到了一些选择,但没有一个是非常开胃的:
我对rabbitmq及其ttl特性不太熟悉,但如果遇到困难的话,我可能可以凑合起来解决这个问题。
有可能使用作业调度器而不是消息队列,但对于我的情况来说,这似乎是一个非常糟糕的阻抗不匹配。
我可以采用数据库作为队列的方法,但是有各种各样的原因我不想这样做。
所以我的问题是:有没有一个排队系统可以支持延迟的开箱即用的交付,而不必在上面分层一堆应用程序逻辑来让它工作?

ca1c2owp

ca1c2owp1#

最近的kafka版本在每条消息上都默认有一个时间戳,您可以使用它来创建一个人工延迟的流。
只需创建一个kafkaconsumer,并在poll循环中检查时间戳是否至少为 n 几秒钟前。如果是的话,暂停循环几秒钟(我已经用了5秒钟才非常有效,但即使是一秒钟也可以处理大量的主题),然后继续正常处理。这将有效地暂停使用者,直到下一个要处理的记录“就绪”(即,足够旧),并且它将保持自我调节,始终保持它 n 离实时还有几秒钟。
javadoc上的更多信息 KafkaConsumer :
https://kafka.apache.org/20/javadoc/org/apache/kafka/clients/consumer/consumerrecord.html#timestamp--

相关问题