我正在尝试在持续运行的过程中实现一个胭脂红工人。
使用 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/退出将关闭侦听器
用lein foo
运行它是错误的方法。我编辑了整个问题以符合我找到的"解决方案"。
主要问题是,我使用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)))