在Heroku上调用clojure worker线程的最佳方法是什么?

时间:2013-05-16 18:41:30

标签: heroku clojure

我目前只是通过调度程序运行任务。它运行了几分钟。我没有理由认为它被关闭了太长时间,但我不知道它是否应该是一个工作线程。

我如何在工作线程上启动clojure进程?它是否像调整ProcFile和调度程序命令一样简单?

我的ProcFile:

web:lein with-profile production trampoline run -m webhook.server

我的应用: - 每小时一次,通过对另一台服务器的预定Web服务调用将数据提取到Heroku数据库中。 - 根据需要,基于环的Web服务将JSON数据提供给Web上其他位置的其他进程。

1 个答案:

答案 0 :(得分:1)

似乎你可以创建一个Heroku“Worker”dyno,它启动一个普通的旧Java线程。例如,您可以使用具有-main函数的Clojure应用程序,该函数使用并发,即

(defn -main [&args]
  (doseq [res (map deref [(future "task 1")
                          (future "task 2")
                          (future "task 3"])]
    (save-results res)))

save-results是一个虚构的函数,可以在某处保存您的工作结果,发送电子邮件,无论如何。

请注意,这可能是更好的方法,即使用AgentsClojure Toolbox(即Quartzite)中列出的Clojure调度库之一。我的例子是一个非常简单(天真的?)的例子,它证明了Heroku工作者dyno的并发性。

有关更多讨论,请参阅此处: https://groups.google.com/forum/#!topic/clojure/xQs6MqD3680

另外,我发现了quite a few篇关于在单个Heroku dyno上运行多个线程的博文/文章。它限制你到每个dyno 255个线程。

更新我为上面创建了一个概念验证:

https://github.com/noahlz/worker-sample