Clojure can';不要开着carmine mq worker
我试图在一个持续运行的过程中实现一个carmine worker 当使用Clojure can';不要开着carmine mq worker,clojure,redis,leiningen,carmine,Clojure,Redis,Leiningen,Carmine,我试图在一个持续运行的过程中实现一个carmine worker 当使用lein run myclass.foo启动以下应用程序时,它会立即启动并停止工作程序 (def my-worker (car-mq/worker queue-server "my-queue" {:handler (fn [{:keys [message attempt]}] (println "Received" message) {:status :
lein run myclass.foo
启动以下应用程序时,它会立即启动并停止工作程序
(def my-worker
(car-mq/worker queue-server "my-queue"
{:handler (fn [{:keys [message attempt]}]
(println "Received" message)
{:status :success})
:auto-start false}))
(defn -main []
(car-mq/start my-worker))
我的目标是这样的
- 启动foo侦听器
- foo listener在前台运行,并打印发布到队列的所有内容
- Ctrl-c/quit将关闭侦听器
- 用
leinfoo
运行它是错误的方法。我编辑了整个问题,以符合我找到的“解决方案”
主要的问题是,我使用lein run myclass.foo
来运行它lein trampoline run myclass.foo
启动应用程序的JVM并摆脱leiningen的JVM,这似乎正是我需要的。当使用trampoline
而不是run
时,应用程序不会立即退出
第2步,关闭ctrl-c上的连接是一个简单的关闭钩子
(.addShutdownHook (Runtime/getRuntime) (Thread. #(car-mq/stop my-worker)))
你想在后台运行还是在前台运行?我认为你应该使用方便的工具将你的provis作为守护进程运行。这里有一个很好的说明如何做:。我特别推荐使用supervisor或upstart之类的工具。但是,例如,如果您想在一个单独的线程(后台)中运行worker,同时在一个主线程(前台)中执行其他操作,那么您应该从clojure应用程序中手动管理它,这很容易做到。@LeonidBeschastny据我所知,胭脂红开始一个背景线。一旦启动,carmine将返回true,应用程序将继续并退出。我想保持应用程序打开,直到手动中断,所以我猜是前台进程。