【问题标题】:Using RabbitMQ with Django to get information from internal servers使用 RabbitMQ 和 Django 从内部服务器获取信息
【发布时间】:2014-04-03 00:03:05
【问题描述】:

在继续之前,我一直在尝试对我的学生项目做出决定。主要思想是从多个内部服务器获取磁盘使用数据、活跃的 linux 用户数据等并使用 Django 发布。

在我来到 RabbitMQ 之前,我正在考虑为每个 linux 服务器开发一个客户端应用程序,并通过一个套接字获取这些数据。但我想让那个学生项目变得简单。另外,我不知道通过Django建立socket连接有多难。

所以,我想我可以在没有套接字编程的情况下用 RabbitMQ 解决我的问题。基本上,我向兔子队列发送消息。然后从消费者服务器获取我想要的任何内容。

在 Django 端,客户端将选择其中一个内部服务器并单击“详细信息”按钮。然后我想在网页上显示这些信息。

我已经阅读了几乎所有关于 rabbitmq、celery 和 pika 的文档。向所有内部服务器(客户端)发送消息并计算我想要获取的信息是可以的,但我不知道如何使用 Django 将这些数据放在网页上?

如果你是我,你会如何解决这个问题?

谢谢。

【问题讨论】:

    标签: python linux django sockets


    【解决方案1】:

    我自己解决了我的问题。解决方案是 RabbitMQ RPC 调用。您可以在远程服务器上执行您的 python 代码并通过 RPC 请求获取处理结果。详细信息可以在这里找到。

    http://www.rabbitmq.com/tutorials/tutorial-six-python.html

    谢谢你们。

    【讨论】:

      【解决方案2】:

      您需要始终运行以下两个程序:

      1. 生产者,它将填充队列。这是收集各种消息然后将它们发布到队列中的程序。

      2. 消费者,它将处理来自队列的消息。这个消费者的工作是阅读消息并用它做一些事情;以便对其进行处理并从队列中删除。这个消费者的功能完全取决于你,但在这个场景中你想做的是将信息从消息写入数据库模型;与您的 django 应用程序相同的数据库。

      当生产者推送消息而消费者将它们从队列中移除时,您的数据库将得到更新。

      在 django 方面,该过程只是过滤此数据库并显示特定机器的记录。因此,django 不需要知道记录是如何填充到数据库中的——django 所做的只是获取、过滤、发送到模板和渲染视图。

      问题在于如何最好(实际上,很容易)填充数据库。你可以用传统的方式来做,通过使用 Python 的良好文档 DB-API 并编写自己的 SQL 语句;但由于 celery 与 django 集成得非常好 - 您也可以使用 django 的 ORM 为您完成这项工作。

      我希望这能让你朝着正确的方向前进。

      【讨论】:

        【解决方案3】:

        看起来您已经完成了艰苦的工作(芹菜、兔子等),但缺少 Django 基础知识。浏览投票教程和getting started with django 或网络上的许多其他资源,这将非常简单。基本上:

        创建模型(以 db 表示的对象) 声明网址 设置视图以将数据从模型传递到网页模板 创建模板(或使用客户端框架并创建 JSON 响应)

        编辑:(在你澄清问题之后)实际上我也遇到了同样的问题。答案是运行 another python 进程与 Django 进程并行(在同一个 virtualenv 中),在这个进程中你可以设置一个 rabbit 消费者(使用 pica、puka、kombu 或其他)并调用特定的 Django 函数/methods 对来自 rabbitmq 的信息进行处理。您也可以从那里调用 celery 任务以在 Django 应用程序上下文中执行。

        例如procfile(只是说明,您可以通过许多其他方式运行这两个进程):

        web: python manage.py runserver
        worker: python listen_from_servers.py
        

        请注意,您必须为设置文件环境变量设置 DJANGO_SETTIGNS_MODULE 才能使 django 导入工作。

        【讨论】:

        • 感谢您的重播。我已经了解 Django 的基础知识,我相信我可以做你所描述的,但我无法理解/想象“我如何从我的客户(内部服务器)获取信息?” .每个工作人员都会从 RabbitMQ 获取消息并进行一些处理。而不是我如何从 django 方面获得处理结果?
        • 也许这可以帮助你simondlr.com/post/24479818721/…
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-09
        相关资源
        最近更新 更多