0

我正在尝试研究如何构建一个“机器”来通过 Twisted 向 WebSphere MQ 发送和接收消息。我希望它尽可能通用,因此我可以在与 MQ 接口的许多不同情况下重用它。

我以前用过 Twisted,但很多年前的现在,我正试图恢复我曾经拥有的知识......

我遇到的具体问题是如何使用 Twisted 实现 MQ IO。有一个与 MQ 接口的 pymqi Python 库,它提供了我需要的所有接口。我需要实现的 MQ 调用是:

  • 发起与特定 MQ 服务器/端口/通道/队列管理器/队列组合的连接
  • 获取内容并将其作为消息发布到所需的队列
  • 轮询队列并返回队列中下一条消息的内容
  • 向队列管理器发送请求以查找当前队列中的消息数

所有这些都涉及阻塞对 MQ 的调用。

由于我打算在一系列项目中多次重用 Twisted/MQ 接口,我应该将 MQ IO 实现为 Twisted 协议、Twisted 传输,还是只是通过 deferToThread() 调用调用 pymqi 方法? 我意识到这是一个非常广泛的问题,可能没有明确的答案;我真的很喜欢那些之前可能遇到过类似挑战的人的建议(即使用总是会阻塞的排队接口)并找到了一种行之有效的方法。

4

1 回答 1

1

如果你要经常使用这个功能,那么拥有一个原生的 Twisted 实现可能是值得的。基于 的包装器deferToThread工作量会减少,但它也会更难测试和调试,性能较差,并且在 Python 线程不能很好工作的某些平台(例如 FreeBSD)上会出现问题。

原生 Twisted 实现的方法可能是实现一个可以与 MQ 服务器对话的协议,并为其提供丰富的 API 用于与通道、队列、队列管理器等交互,然后在其之上构建一个抽象层远离应用程序的实际网络连接(我相信 mqi/pymqi 在很大程度上是这样做的)。

于 2012-08-03T10:54:40.337 回答