我通过芹菜为我的一个社交网络Django web应用程序运行异步任务。在我目前的设置中,芹菜工人和celerybeat运行在web应用服务器上,而postgresql DB驻留在单独的服务器上。
异步任务不应该妨碍/减慢用户体验,因此我决定将它们移动到自己的专用机器上(它们现在已经变得相当庞大)。
我的问题是关于如何实现上述架构。异步工作者正在操作DB中的表和行。
1)我如何在远程位置调用异步工作者,
2)我如何路由他们的结果来影响数据库中所需的更改?
想知道最有效的方法来实现这一点,一个说明性的例子会很好。提前感谢。
你只需要像这样改变BROKER_URL
:
BROKER_URL = 'amqp://username:password@myremotehost.com//'
所以首先你必须决定你想要使用什么代理,更多的信息可以在这里找到http://docs.celeryproject.org/en/latest/getting-started/brokers/index.html。
在上面的BROKER_URL
示例中,我提到了使用rabbitmq-server。
在你的远程服务器上,你必须把你的代码(可能使用git或svn),然后你需要安装你决定使用的任何代理,在我的例子中,你必须安装rabbitmq-server
。在ubuntu中你可以输入:sudo apt-get install rabbitmq-server
安装rabbitmq-server
然后你需要像这样安装celery
:pip install celery
您可以进一步使用supervisor
来管理您的芹菜启动,重新启动和停止。关于supervisor
的更多信息可以在这里找到:http://supervisord.org/
编辑1:
答案1:芹菜函数调用相同。
答案2:你只需要像这样在settings.py文件中添加远程机器db主机:
我假设你使用MySQL
作为数据库。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': your_db_name,
'USER': your_db_user,
'PASSWORD': your_db_password,
'HOST': your_remote_db_host_here,
'PORT': your_port_no_for_mysql_here,
},
}
这个设置的作用是告诉应用程序的所有用户(像芹菜这样的用户)连接到远程主机以访问MySQL数据库。