【发布时间】:2020-07-07 15:43:22
【问题描述】:
我在之前的项目中使用 ZeroMQ 在不同服务器上的两个不同 python 程序之间发送消息。我现在有一个程序,我想使用 Django 作为前端。
在消息队列和 python 上进行大量谷歌搜索,最常见的是 Celery 和 RabbitMQ。但这似乎不是我想要的。 Celery 似乎很适合在 Django 应用程序中生成任务并处理它们并将结果写回 Django。
我正在寻找的是一种解决方案,它允许我在创建或删除新模型项时向其他 python 程序发送消息。当其他 python 程序收到类似的错误时,我想向 Django 发送一条消息并创建一个新的错误模型项。
有什么好办法吗?我能做的是使用不同的技术从 django 发送和接收。我可以将简单的 UDP 发送到我的其他程序,然后通过 HTTP API 将内容发回 django。但我认为拥有某种形式的消息传递系统来处理这个问题并确保消息到达会更好。
【问题讨论】:
-
是什么阻碍了您继续使用 ZeroMQ?
-
如何将它集成到 django 中?我是否还需要一个单独的 ZMQ 客户端进程,然后我仍然需要一种将数据发布到 django 的方法。
-
我从未使用过 ZeroMQ 但 django 只是 python 程序。您如何将数据放入 zeromq 应该是相同的。它可能发生在您的视图函数或其他任何地方。您已经提到使用 API 将数据发回 django,这完全没问题,不是吗?
-
嗯,其实我检查了一下ZeroMQ,听起来它的级别很低,并且没有交付可靠性。我猜你需要使用 RabbitMQ,它更好地支持排队系统。但是,您仍然可以在 django 中以正常的 python 方式使用它而不会出现问题。
-
好的。凉爽的。 RabbitMQ 似乎是我应该使用的东西,但大多数信息似乎与芹菜有关。但是我会在哪里把代码放在我的 django 项目中。 zeromq 中的标准方法是创建上下文并将其绑定到地址。然后您需要在发送消息之前稍等片刻,因为在发送消息之前已连接的那些可能没有时间连接。如果您想继续发送消息,请使用 whileloop。在 Django 中是否有一个地方可以在服务器启动时创建上下文和绑定,然后导入对象并调用其函数。
标签: python django rabbitmq zeromq pyzmq