doseq with KafkaStream评估前一项

时间:2015-06-19 10:25:09

标签: java clojure lazy-sequences

我想从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事件,尽管它坐在那里等待。我真的不明白。

0 个答案:

没有答案