我想从KafkaStream
中弹出消息并处理它们。当KafkaStream
实现java.lang.Iterable
时,我认为我可以将流放入doseq
并且它会在消息进入时消耗它们。但是会发生的是消息只传递给doseq
的正文,当KafkaStream
添加了另一条消息时,将其推出。
(doseq [msg (map unpack-message ^KafkaStream stream)]
(handler msg))
我要做的是实现在https://github.com/pingles/clj-kafka/blob/master/src/clj_kafka/consumer/zk.clj lazy-iterate
中完成的操作,并使用迭代器构建一个seq。这有效,但我不明白为什么,有人可以解释一下吗?
另一个更奇怪的事情是,如果我在unpack-message函数中放置一个日志行,我会看到它在消息进入时被评估。所以消息在一个惰性函数map
中被解压缩但是它不是来自doseq
事件,尽管它坐在那里等待。我真的不明白。