我设法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路由将完成这项工作.我已经尝试过简单的用例(一个服务器),它运行得很好.应该很容易使通信多服务器准备就绪.我不喜欢芹菜.这是"神奇的",隐藏了太多的细节,并不容易配置.但我会留下这个问题,因为我对别人的意见很感兴趣.