Django和芹菜在不同的服务器上,一旦任务完成,芹菜可以向Django发送回调



我有一个django项目,在那里我使用芹菜与rabbitmq来执行一组异步。任务。所以我计划的设置是这样的。

  1. Django应用运行在一个服务器上。
  2. 芹菜工人和rabbitmq从另一个服务器运行。

我最初的问题是,我如何从另一个服务器上的芹菜任务访问django模型?

,假设我不能访问Django模型,有没有一种方法一旦任务完成,我可以发送回调到Django应用程序传递值,这样我就可以更新Django的数据库基于传递的值?

关于你的第一个问题,从工人服务器访问django模型:

你的django应用程序必须在服务器A(服务用户)和服务器B(托管芹菜worker)

上可用。

关于你的第二个问题,基于值更新数据库。你是指异步任务的结果吗?如果是这样,那么您有两个选择:

  • 你可以在任务本身中保存任何你需要保存的东西,假设你可以访问数据库。
  • 你可以使用一个结果后端(其中一个是通过Django ORM),在芹菜的官方文档中提到的关于保持结果

我在我的应用程序中使用了以下设置:

  1. Task是由Django发起的——信息是从模型实例中提取出来的,并作为字典传递给Task。注:这将是未来的证明,因为芹菜4将默认使用JSON编码
  2. 远程服务器运行任务并创建结果字典
  3. 远程服务器然后调用一个更新任务,这个任务只被Django服务器上的worker侦听。
  4. Django worker读取结果字典并更新模型。

Django worker监听一个单独的队列,这不是严格必要的。没有使用结果后端——所需的数据只是传递给任务

相关内容

  • 没有找到相关文章

最新更新