Не может держать Кармин 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)))