如何在Clojure应用程序中的工作节点上运行分发任务?

时间:2013-11-11 15:53:07

标签: clojure rabbitmq celery

在Python / Django堆栈上,我们习惯使用Celery和RabbitMQ。 一切都很容易完成。

然而,当我们尝试在Clojure土地上做同样的事情时,我们能得到的是Langhour。 在我们目前的天真实施中,我们有一个工作系统,它有三个核心部分。

  • 发布商模块
  • 订阅者模块
  • 任务模块

我们可以在发布者或订阅者模式的任何节点上启动系统。 它们连接到RabbitMQ服务器。

他们共享一个worker_queue。

我们正在做的是在任务模块中创建任务,然后在我们想要在订户上运行任务时。我们发送一个表达式调用方法,以EDN格式向Subscriber发送,然后对其进行解码并使用eval运行实际任务。

现在使用eval安全吗?我们没有运行由用户或任何第三方系统生成的表达式。最初我们计划使用JSON发送有效负载消息,但是EDN给了我们更多的灵活性,它就像现在的魅力一样。

还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

取决于您的需求(以及您的团队),我强烈建议Storm Project。您将获得分布式,容错和实时计算,并且它非常易于使用。

Storm中的另一个好处是它支持多种选项作为拓扑的数据源。它可以是例如:Apache Kafka,RabbitMQ,Kestrel,MongoDB。如果您不满意,那么您可以编写自己的驱动程序。

它还有一个Web界面,可以查看拓扑中发生的情况。