Допустим, у меня есть очередь RabbitMQ, и я хочу написать код clojure для обработки сообщений в очереди

#clojure

#clojure

Вопрос:

Как или каким образом я мог бы вызвать свой код clojure для обработки задач в очереди RabbitMQ?

Должен ли я написать демона или что?

Я знаю, что для первоначального запуска Java-кода требуется много времени, поэтому я хотел бы надеяться, что найдется способ написать длительный процесс для запуска моего кода clojure.

Я совершенно не понимаю, в каком контейнере будет запускаться clojure, например, будет ли это демон, если да, то как написать демон clojure?

Комментарии:

1. Не могли бы вы уточнить, что это за очередь?

2. итак, какой-нибудь из ответов ответил на ваш вопрос?

Ответ №1:

Ваш вопрос немного общий, поэтому позвольте мне его разбить:

  1. У вас есть очередь RabbitMQ, и вы хотите получать сообщения из Clojure
  2. Вы хотите запустить этот приемник сообщений как отдельную программу
  3. Вы хотите запустить эту программу в качестве фоновой задачи

Из вашего вопроса я понимаю, что вы рассмотрели первую часть (использование сообщений RabbitMQ в clojure).

Что касается второй части вашего вопроса, запуск программы clojure автономно:

Вам нужно создать функцию main в вашем коде clojure, чтобы вы могли запускать ее как отдельную программу:

 (defn -main [amp; args]
  "your code")
  

Подробнее об этом смотрите на веб-сайте clojure. Если вы используете Leiningen в качестве инструмента сборки, вам следует указать свою основную функцию в вашем project.clj файле, а затем создать uberjar, например

 $ lein compile
$ lein uberjar
$ java -jar my-uber-jar.jar
  

Процедура запуска вашей программы в качестве фоновой задачи отличается для разных операционных систем. Самый простой способ запустить что-либо в фоновом режиме — добавить амперсанд после команды:

 $ java -jar my-uber-jar.jar amp;
  

Но ваша программа завершится, когда вы закроете терминал, в котором ввели эту команду.

Комментарии:

1. Самое простое решение, позволяющее избежать завершения работы вашей программы при закрытии терминала, — использовать nohup ( en.wikipedia.org/wiki/Nohup ). Приведенная выше команда Gert будет гласить: nohup java -jar my-uber-jar.jar amp;

Ответ №2:

Я написал сообщение в блоге о clojure и RabbitMQ, надеюсь, это поможет!

Он охватывает добавление сообщений в очереди и получение их из очередей.

http://www.learningclojure.com/2011/02/rabbitmq-clojure-hello-world.html

Если вы не знаете, как создавать демонов (это довольно сложно, и я никогда не делал этого с помощью clojure), но хотите длительный процесс, то обходным путем может быть сеанс просмотра экрана. Затем вы можете запустить свою программу в терминале, но все равно выйти из системы и оставить ее запущенной.

Как это бывает, я также когда-то написал руководство по началу работы с экраном. Вы можете найти его здесь:

http://johnsunixtips.blogspot.com/2010/12/most-basic-possible-screen-tutorial.h