0

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

然而,当我们尝试在 Clojure 领域做同样的事情时,我们能得到的是 Langhour。在我们当前的幼稚实现中,我们有一个工作系统,它具有三个核心部分。

  • 发布者模块
  • 订户模块
  • 任务模块

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

他们共享一个worker_queue。

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

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

还有更好的方法吗?

4

1 回答 1

1

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

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

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

于 2013-11-11T17:03:22.040 回答