我设法获得Django
并在单台机器RabbitMQ
上Celery
工作。我已按照此处的说明进行操作。现在我想让它们一起工作,但在它们位于不同服务器上的情况下。我不想Django
知道Celery
也不Celery
知道Django
。
所以,基本上我只想Django
将一些消息发送到RabbitMQ
队列(可能是 id、任务类型、可能是其他一些信息),然后我想RabbitMQ
将该消息(如果可能的话)发布到Celery
另一台服务器上。Celery/Django
不应该互相了解,基本上我想要很容易替换其中任何一个的架构。
现在我有Django
几个电话,比如
create_project.apply_async(args, countdown=10)
我想用直接对 RabbitMQ 的类似调用来替换它(正如我所说的Django
不应该依赖于Celery
)。然后,RabbitMQ
应该通知Celery
(如果可能)Celery
并将完成其工作(可能与Django
但通过REST
接口交互)。
此外,我需要Celery
在两台或多台服务器上拥有工作人员,并且我只想RabbitMQ
根据消息中的某些字段通知其中一个。如果这太复杂了,我可以检查每个任务(在不同的机器上),比如:这是你应该做的事情吗(比如检查消息中的 ip 地址字段),如果它不仅仅是停止执行任务。
我怎样才能做到这一点?如果可能的话,我更喜欢代码+配置示例,而不仅仅是理论解释。
编辑:
我认为对于我的用例芹菜是总开销。带有自定义客户端的简单 RabbitMQ 路由将完成这项工作。我已经尝试过简单的用例(一台服务器)并且效果很好。使通信多服务器准备好应该很容易。我不喜欢芹菜。它很“神奇”,隐藏了太多细节,而且不容易配置。但我会留下这个问题,因为我对别人的意见感兴趣。