2

我有一个作为发布者的频道:

(def publisher (async/chan))
(def publication (async/pub publisher :topic))

由于 的性质sub/pub,当我这样做时:

(async/put! publisher {:topic :foo})

消息被发布使用,并且由于没有订阅者,它将被丢弃。

如果我尝试订阅该:foo主题:

(def reader (async/chan))
(async/sub publication :foo reader)
(async/go (println "got val " (async/<! reader)))

我不会看到任何印刷品。但是,如果我在发布者中放置更多项目:

(async/put! c1 {:topic :foo :msg "after"})
==> got val {:topic :foo :msg "after"}

即使订阅者尚未订阅,有没有办法不丢失n发布者生成的最后一个项目?

4

2 回答 2

3

pub接受buf-fn给定主题的函数。这个函数应该返回一个缓冲区。比如dropping-buffersliding-buffer。因此,如果您希望您的:foo主题被缓冲:

(pub pub-ch :topic #(if (= % :foo) (sliding-buffer 10) nil))

另请参阅相关代码部分

于 2015-04-07T02:23:00.383 回答
0

文档是明确的:

没有匹配的潜艇时收到的物品被丢弃

于 2015-02-25T00:21:30.183 回答