【发布时间】:2015-05-04 09:48:11
【问题描述】:
我正在尝试在一个不断运行的进程中实现一个胭脂红工人。
当使用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 监听器在前台运行并打印所有发布到队列中的内容
- Ctrl-c / quit 将关闭监听器
【问题讨论】:
-
你想在后台运行还是在前台运行?
-
我认为你应该使用方便的工具来调整你作为守护进程的证明。这是一个很好的说明如何做到这一点:Run php script as daemon process。我特别推荐使用主管或新贵之类的东西。
-
但是,例如,如果你想在一个单独的线程中(在后台)运行一个工作线程,同时在一个主线程(在前台)中做一些其他的事情,那么你应该从你的clojure 应用程序,这很容易做到。
-
@LeonidBeschastny 据我所知,carmine 启动了一个后台线程。一旦启动 carmine 就会返回 true 并且应用程序继续并退出。我想保持应用程序打开直到手动中断,所以我猜是前台进程。
标签: clojure redis leiningen carmine