假设我有一个RabbitMQ队列,我想编写clojure代码来处理队列中的消息

Bla*_*man 3 clojure

我将如何或以何种方式调用我的clojure代码来处理RabbitMQ队列上的任务?

我是否必须写一个守护进程或者什么?

我知道java代码最初需要很长时间才能启动,所以我希望有一种方法可以为我的clojure代码编写一个运行时间长的进程.

我完全迷失了什么容器clojure将运行,例如它是一个守护进程,如果是的话,如何写一个clojure守护进程?

Ger*_*ert 5

你的问题有点泛,所以让我分解一下:

  1. 您有一个RabbitMQ队列,并且您希望使用Clojure中的消息
  2. 您希望将此消息使用者作为独立程序运行
  3. 您希望将此程序作为后台任务运行

从你的问题我明白你已经有了第一部分(在clojure中消费RabbitMQ消息).

对于问题的第二部分,单独运行clojure程序:

您需要在clojure代码中创建一个main函数,以便可以将其作为独立程序运行:

(defn -main [& args]
  "your code")
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅clojure网站.如果您使用Leiningen作为构建工具,则应在project.clj文件中指定主函数,然后构建一个uberjar,例如

$ lein compile
$ lein uberjar
$ java -jar my-uber-jar.jar
Run Code Online (Sandbox Code Playgroud)

将程序作为后台任务运行的过程因不同的操作系统而异.在后台运行某些东西的最简单方法是在命令后添加一个&符号:

$ java -jar my-uber-jar.jar &
Run Code Online (Sandbox Code Playgroud)

但是当您关闭键入此命令的终端时,您的程序将终止.