我正在开发一个有两个组件的系统 - 一个Django Web应用程序和一个监视器进程。
监视进程连接到某处的 TCP/IP 服务器,并使用专有协议接收事件指示。它还可以使用专有协议再次向服务器发送命令。
我想将监视器作为守护程序运行。它将连接到服务器并持续监视传入的事件。每当事件到达时,监视器都会更新数据库。Web 应用程序将从数据库中获取当前状态。
不过,我在发送命令时有点困难。我需要 Django 网络应用程序以某种方式与监视器服务进行通信。我可以使用Pyro,正如这里推荐的那样,但我更愿意使用Celery,因为我已经在系统的其他部分使用它了。
如何让 Celery 工作人员既管理监视器连接又处理 Celery 请求?
注意:由于专有协议的限制,我无法打开与服务器的两个连接,因此不能让一个进程监视事件和另一个进程发送命令。
如果你真的想在这个用例中使用 Celery,我建议如果你定义一个单独的队列会更好,即 server_monitor
所有服务器监视器任务并将其路由到该队列。现在,若要避免与服务器建立多个连接,请使用 -c 1
运行工作线程。
此外,由于您希望能够处理服务器监视器事件和 Celery 请求,因此请命令新工作线程为两个队列提供服务-q celery,server_monitor
。这样,工作线程将处理这两种类型的请求,但要注意 - 如果您的celery
队列处于繁忙的流量下,则可能需要很长时间来处理来自队列server_monitor
请求。