通过Django控制外部python程序的消息队列。

问题描述 投票:0回答:2

我在之前的一个项目中使用ZeroMQ在不同服务器上的两个不同的python程序之间发送消息。现在我有一个程序,我想使用Django作为前端。

我在网上查了很多关于消息队列和python的资料,最常见的是Celery和RabbitMQ。但这似乎不是我想要的。Celery似乎很适合在Django应用程序中生成任务,然后处理它们并将结果写回Django。

我需要的是一个解决方案,当我创建或删除一个新的模型项目时,允许我向另一个python程序发送一个消息。当另一个python程序出现错误时,我想给Django发送一条消息,并创建一个新的错误模型项。

有什么好办法吗?我可以使用不同的技术从Django发送和接收信息。我可以发送简单的UDP到我的其他程序,然后通过HTTP API把东西发回给django。但我认为如果能有某种形式的消息系统来处理这个问题并保证消息的到达,那就更好了。

python django rabbitmq zeromq pyzmq
2个回答
1
投票

不知道你卡在哪里,所以我会尽量把所有的内容都覆盖到。

在我目前正在做的项目中,我们使用API和rabbitmq来传递消息。

我们有一个python的非django进程监听一个rabbitmq队列,所以当Django需要和它对话时,我们只需要把JSON格式的消息泵入队列,然后这个进程就会接收并处理这些消息。

其实你可以在非django应用中使用django模型和其他API。如果这是你想做的,这里有一个链接可以开始做。

http:/blog.gabrielsaldana.org使用-django-models-external-python-scripts。

我们的另一个外部进程需要将信息传回Django,所以我们只是做了一些API端点,外部进程只需要使用HTTP POST来发送数据。

如果要在每次创建或保存模型时做事情,你要研究一下Django信号。

https:/docs.djangoproject.comen1.9topicssignals。

如果我还是有所遗漏,你需要更好地解释一下你要解决的问题到底是什么?


0
投票

对于Python中不同服务器之间的消息队列,你可以在以下网站查看aioconnectors https:/pypi.orgprojectaioconnectors这是一个非常容易设置的消息中介,建立在async之上,Django 3.0可能对async有足够的支持,可以把它整合起来,另外,如果你需要的话,可以同步发送消息,异步接收消息可以写到DB或者缓存。

© www.soinside.com 2019 - 2024. All rights reserved.