Ich habe eine Clojure Processing App, die eine Pipeline von Kanälen ist. Jeder Verarbeitungsschritt führt seine Berechnungen asynchron durch (dh er macht eine HTTP-Anfrage unter Verwendung von http-kit oder etwas) und bringt sein Ergebnis auf den Ausgabekanal. Auf diese Weise kann der nächste Schritt aus diesem Kanal lesen und seine Berechnung durchführen.Wie man am besten eine clojure core.async Pipeline von Prozessen herunterfahren
Meine Hauptfunktion sieht wie folgt aus
(defn -main [args]
(-> file/tmp-dir
(schedule/scheduler)
(search/searcher)
(process/resultprocessor)
(buy/buyer)
(report/reporter)))
Derzeit ist der Scheduler Schritt, um die Pipeline-Laufwerke (es hat einen Eingangskanal nicht bekam), und bietet die Kette mit Arbeitsbelastung.
Wenn ich laufe dies in der REPL:
(-main "some args")
Es läuft im Grunde immer auf Grund der Unendlichkeit des Schedulers. Was ist der beste Weg, um diese Architektur so zu ändern, dass ich das ganze System von der REPL herunterfahren kann? Bedeutet das Schließen jedes Kanals, dass das System beendet wird?
Würde ein Broadcast-Kanal helfen?
'(System/Ausgang 0)'? – Bill
Das tötet leider auch die REPL. Ich werde den Komponenten-Ansatz ausprobieren –