2012-08-03 33 views
0

我在尝试解决如何构建“机器”以通过Twisted向WebSphere MQ发送和接收消息。我希望它尽可能通用,所以我可以在与MQ接口的许多不同情况下重用它。使用带有扭曲的WebSphere MQ

我以前用过的扭曲,但很多年前,现在我想复活的知识,我曾经有过...

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

  • 发起到特定的MQ服务器/端口/信道/队列管理器/队列组合
  • 取内容的连接,并张贴的消息到所需的队列
  • 调查队列和返回的下一条消息的内容在队列
  • 发送到队列管理器的请求,发现当前在队列

所有这些涉及阻断MQ呼叫的消息的数量。

因为我打算在很多项目中重复使用Twisted/MQ接口,所以我应该将MQ IO作为Twisted协议实现,作为Twisted传输,或者只需通过pymqi方法调用deferToThread()调用?我意识到这是一个非常广泛的问题,可能没有明确的答案。我真正接受过之前可能遇到类似挑战的人的建议(即处理总是阻塞的排队接口),并找到了一种行之有效的方法。

回答

1

如果你打算使用这个功能很多,那么有一个原生的Twisted实现可能是值得的。一个基于deferToThread的包装将会减少工作量,但是在Python线程不能很好地工作的某些平台上(例如FreeBSD),测试和调试,执行得并不好,也会遇到问题。

本地Twisted实现的方法可能是实现一个协议,该协议可以与MQ服务器通信并为其提供丰富的API以与通道,队列,队列管理器等进行交互,然后在顶层构建一个图层从应用程序中抽象出实际的网络连接(正如我相信mqi/pymqi在很大程度上所做的那样)。

+0

只是为了记录,WebSphere MQ使用的协议是封闭的。没有真正的文档说明它如何完全按字节逐个工作。 除了不同的RedBook或支持包提供的资源不足之外,理解协议的最佳资源是Wireshark的MQ解析器。但是这还远远没有完成。专有协议的喜悦! : - / – 2012-09-06 17:51:28