2015-04-30 60 views
1

我試圖在不斷運行的過程中實施胭脂紅工人。不能保持胭脂蟲工人開放

當啓動與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的聽衆
  • 富聽衆在前臺運行,並打印被髮布到隊列
  • 按Ctrl-C一切/不幹將關閉聽衆
+0

你想在背景或前景運行呢? –

+0

我認爲你應該使用方便的工具來將你證明爲一個守護進程。這是一個相當不錯的說明如何做到這一點:[運行PHP腳本作爲守護進程](http://stackoverflow.com/questions/2036654/run-php-script-as-daemon-process)。我特別推薦使用諸如主管或新貴之類的東西。 –

+0

但是,如果你想在一個單獨的線程(在後臺)中運行一個worker,同時在主線程中(在前臺)做一些其他的東西,那麼你應該從你的clojure應用程序手動管理它,這很容易去做。 –

回答

0

運行它與lein foo是錯誤的方法。我編輯了整個問題以符合我找到的'解決方案'。

的主要問題是,我是用lein run myclass.foo來運行它。 lein trampoline run myclass.foo啓動應用程序的JVM並擺脫leiningen的,似乎正是我所需要的。當使用trampoline而不是run時,該應用不會立即退出。

第2步,收於CTRL-C的連接是一個簡單的關閉掛鉤

(.addShutdownHook (Runtime/getRuntime) (Thread. #(car-mq/stop my-worker)))