パブリッシャーとして機能するチャンネルがあります。
(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
、パブリッシャーによって作成された最後のアイテムを失わないようにする方法はありますか?