在Python / Django堆栈上,我们习惯使用Celery和RabbitMQ。 一切都很容易完成。
然而,当我们尝试在Clojure土地上做同样的事情时,我们能得到的是Langhour。 在我们目前的天真实施中,我们有一个工作系统,它有三个核心部分。
我们可以在发布者或订阅者模式的任何节点上启动系统。 它们连接到RabbitMQ服务器。
他们共享一个worker_queue。
我们正在做的是在任务模块中创建任务,然后在我们想要在订户上运行任务时。我们发送一个表达式调用方法,以EDN格式向Subscriber发送,然后对其进行解码并使用eval运行实际任务。
现在使用eval安全吗?我们没有运行由用户或任何第三方系统生成的表达式。最初我们计划使用JSON发送有效负载消息,但是EDN给了我们更多的灵活性,它就像现在的魅力一样。
还有更好的方法吗?
答案 0 :(得分:1)
取决于您的需求(以及您的团队),我强烈建议Storm Project。您将获得分布式,容错和实时计算,并且它非常易于使用。
Storm中的另一个好处是它支持多种选项作为拓扑的数据源。它可以是例如:Apache Kafka,RabbitMQ,Kestrel,MongoDB。如果您不满意,那么您可以编写自己的驱动程序。
它还有一个Web界面,可以查看拓扑中发生的情况。