我通过celery运行异步任务,用于我的社交网络Django Web应用程序。在我当前的设置中,芹菜工作者和celerybeat在Web应用程序服务器上运行,而postgresql DB驻留在单独的服务器上。
异步任务不应该阻碍/减慢用户体验,因此我决定将它们移动到他们自己的专用机器上(他们现在变得非常庞大)。
我的问题是关于如何实现上述架构。异步工作者正在操作数据库中的表和行。
1)我如何在远程位置呼叫我的异步工人
2)我如何路由他们的结果以实现DB中所需的更改?
很想知道实现这一目标的最有效方法,一个说明性的例子会很好。提前致谢。
答案 0 :(得分:0)
您只需要像这样更改BROKER_URL
:
BROKER_URL =' amqp://用户名: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文件中添加远程机器数据库主机,如下所示:
我假设您使用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数据库的远程主机。