Не может держать Кармин MQ работника открытым

Я пытаюсь внедрить работника кармина в постоянно работающий процесс.

При запуске следующего приложения с 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 Listener
  • слушатель foo работает на переднем плане и печатает все, что публикуется в очереди
  • Ctrl-c / quit закроет слушателя

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)))
Другие вопросы по тегам