0

我正在开发与zmq集成的Flask-SocketIO应用程序。该应用程序的基本前提是 Flask-SocketIO Web 服务器接收到 zmq 消息,然后将该 zmq 消息转换为 SocketIO 消息,然后发送到客户端(浏览器)。我有应用程序工作,但不完全是我希望它工作的方式。

zmq 事件侦听器需要位于与主服务器进程不同的进程上。我能够使用 Redis 和 RabbitMQ 作为消息队列来促进 SocketIO 从非服务器进程发出。好,很好。所以有什么问题?

问题是我真的很想使用 zmq 作为消息队列而不是 Redis 或 RabbitMQ,因为我已经在我的应用程序中集成了 zmq。所以我在 Flask-SocketIO 文档中读到Kombu是支持其他类型消息队列的机制。嗯不错。但后来我注意到 zmq 作为传输已从Kombu 的最新版本中删除。据我所知,它仅在作为传输选项时才具有实验性,例如在Kombu 3.0.37中。

我的第一种方法是通过 Kombu 3.0.37 尝试 zmq 作为消息传输,但这不起作用。我仍在试图确定这是为什么。但是在看了一点源代码之后,我现在最好的猜测是多个进程正试图在同一个端口上打开一个 PULL 套接字,即使在一个简单的独立示例中也是如此。这是有道理的。在这方面,我的下一步是手动创建一个独立于 zmq 传输代码的 PULL 套接字,并以某种方式将其作为一种单例传递给 zmq 传输代码使用。

我正在使用的另一种方法是让 zmq 在Hello World Kombu 示例中充当传输工具。我将示例代码中的连接字符串替换为zmq+tcp://localhost. 很明显,我不了解如何将 zmq 用作消息队列传输。如果我运行发布者代码,我可以发送消息。但是当我几秒钟后运行客户端代码时,它说队列是空的。这让我认为,为了让 zmq 作为传输器工作,我可能需要某种外部 zmq 消息代理,我假设我需要自己组装。但我还没有弄清楚它是如何工作的。

有什么建议么?尝试将 zmq 用作传输是浪费时间,还是应该继续走这条路?Miguel Grinberg(Flask-SocketIO 的作者)慷慨地提供了一些指导,但我想扩展一点,看看其他人是否对此事有一些想法。

4

0 回答 0