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 监听器
  • foo 侦听器在前台运行并打印发布到队列的所有内容
  • Ctrl-c / quit 将关闭监听器
4

1 回答 1

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)))
于 2015-05-04T01:47:03.957 回答