【问题标题】:can't keep carmine mq worker open不能让胭脂红 mq 工作人员保持打开状态
【发布时间】: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


【解决方案1】:

使用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)))

【讨论】:

    猜你喜欢
    • 2017-10-14
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 2012-01-25
    相关资源
    最近更新 更多