我有两个站点运行基本上相同的代码库,只是设置略有不同。每个网站都是在Django中构建的,并集成了一个WordPress博客。
每个网站都需要从WordPress导入博客文章,并将其存储在Django数据库中。当用户发布帖子时,WordPress会在Django端点击一个webhook URL,这会启动一个Celery任务,该任务会获取帖子的JSON版本并将其导入。
我最初的想法是,每个站点都可以运行自己的manage.py celeryd
实例,每个站点在自己的virtualenv
中,并且这两个站点将相互远离。每个都用一个单独的暴发户脚本进行守护。
但看起来他们好像在碰撞。我可以一次成功地运行一个,但如果两个实例都在运行,一个实例将不会收到任务,或者任务将使用错误的设置运行(在这种情况下,每个实例都有一个WORDPRESS_BLOG_URL
设置)。
如果有区别的话,我使用的是Redis队列。我在这里做错了什么?
您是否指定了芹菜应该使用的默认队列的名称?如果尚未设置CELERY_DEFAULT_QUEUE,则两个站点将使用相同的队列并获取彼此的消息。您需要为每个站点将此设置设置为不同的值,以保持邮件的独立性。
编辑
没错,CELERY_DEFAULT_QUEUE只适用于像RabbitMQ这样的后端。我认为你需要为每个网站设置一个不同的数据库编号,在你的经纪人url末尾使用一个不同编号。
如果您使用的是django芹菜,请确保您的虚拟机之外没有运行芹菜的实例。然后像您所做的那样,使用manage.py celeryd
在您的虚拟机中启动芹菜实例。我建议设置supervisord来跟踪您的实例。