gpt4 book ai didi

python - Python + Twisted 中的消息队列代理

转载 作者:行者123 更新时间:2023-11-28 22:06:52 25 4
gpt4 key购买 nike

我想实现一个轻量级的 Message Queue 代理。它的工作是从 Web 应用程序 (PHP) 接收消息并将它们异步发送到 Message Queue 服务器。使用此代理的原因是 MQ 并不总是可用,有时会滞后,甚至出现故障,但我想确保消息已传送,并且 Web 应用程序会立即返回。

因此,PHP 会将消息发送到在同一主机上运行的 MQ 代理。该代理会将消息保存到 SQLite 以持久保存,以防发生崩溃。同时在连接可用时将SQLite中的消息批量发送到MQ,并从SQLite中删除。

现在,据我了解,此服务中有以下组件:

  1. 消息监听器(监听来自 PHP 的消息并将它们写入传入队列)
  2. DB flusher(从传入队列读取消息并将它们保存到数据库;由于 SQLite 单线程)
  3. MQ 连接处理程序(通过重新连接保持与 MQ 服务器的连接在线)
  4. 消息发送者(从SQlite db收集消息并将它们发送到MQ服务器,然后从db中删除它们)

我正在考虑将 Twisted 用于 #1 (TCPServer),但我在将它与其他非事件驱动的点集成时遇到了问题。直觉告诉我,这些点中的每一个都应该在一个单独的线程中运行,因为它们都是 IO 绑定(bind)的并且彼此独立,但我可以轻松地将它们放在一个线程中。尽管如此,除了 Twisted 的主循环之外,我找不到任何好的和清晰的(对我来说)示例来说明如何实现这个工作线程。

我开始的例子是 chatserver.py ,它使用 service.Application 和 internet.TCPServer 对象。如果我在创建 TCPServer 服务之前启动自己的线程,它会运行几次,但会停止并且再也不会运行。我不确定为什么会这样,但这可能是因为我没有正确使用带有 Twisted 的线程。

关于如何实现一个单独的工作线程并保持 Twisted 有什么建议吗?您有任何替代架构吗?

最佳答案

您基本上是在考虑为您的消息传递服务器编写一个临时扩展,它的工作是提供您要求的任何可靠性保证。

相反,也许您应该在计划运行此新代理的地方使用硬件并在其上运行另一个 MQ 节点。新节点应负责在其他节点过载或离线时保存和中继您传递给它的消息。

关于python - Python + Twisted 中的消息队列代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2950777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com