Add support for emit messages without waiting response on worker

This commit is contained in:
Andrey Antukh 2025-09-25 09:55:34 +02:00
parent 255f5af2e3
commit 1d54fe2e24
2 changed files with 29 additions and 7 deletions

View File

@ -21,7 +21,6 @@
:config {:public-uri cf/public-uri :config {:public-uri cf/public-uri
:build-data cf/build-date :build-data cf/build-date
:version cf/version}}) :version cf/version}})
(set! instance worker))) (set! instance worker)))
(defn ask! (defn ask!
@ -34,6 +33,16 @@
(uw/ask! instance message transfer) (uw/ask! instance message transfer)
(rx/empty)))) (rx/empty))))
(defn emit!
([message]
(if instance
(uw/emit! instance message)
(rx/empty)))
([message transfer]
(if instance
(uw/emit! instance message transfer)
(rx/empty))))
(defn ask-buffered! (defn ask-buffered!
([message] ([message]
(if instance (if instance

View File

@ -19,7 +19,7 @@
([worker message] ([worker message]
(send-message! worker message nil)) (send-message! worker message nil))
([worker {sender-id :sender-id :as message} {:keys [many?] :or {many? false}}] ([worker {sender-id :sender-id :as message} {:keys [many? ignore-response?] :or {many? false ignore-response? false}}]
(let [take-messages (let [take-messages
(fn [ob] (fn [ob]
(if many? (if many?
@ -34,11 +34,13 @@
(if (some? instance) (if (some? instance)
(do (.postMessage instance data transfer) (do (.postMessage instance data transfer)
(->> (:stream worker) (if (not ignore-response?)
(rx/filter #(= (:reply-to %) sender-id)) (->> (:stream worker)
(take-messages) (rx/filter #(= (:reply-to %) sender-id))
(rx/filter (complement :dropped)) (take-messages)
(rx/map handle-response))) (rx/filter (complement :dropped))
(rx/map handle-response))
(rx/empty)))
(rx/empty))))) (rx/empty)))))
(defn ask! (defn ask!
@ -51,6 +53,17 @@
:payload message :payload message
:transfer transfer}))) :transfer transfer})))
(defn emit!
([worker message]
(emit! worker message nil))
([worker message transfer]
(send-message!
worker
{:sender-id (uuid/next)
:payload message
:transfer transfer}
{:ignore-response? true})))
(defn ask-many! (defn ask-many!
([worker message] ([worker message]
(ask-many! worker message nil)) (ask-many! worker message nil))