python访问IBM WebSphere MQ队列遇到的问题

      最近一直在忙一个自动化系统的项目,项目为CS架构,涉及到二十多个服务程序。根据用户需求,这些服务程序都需要用运维系统统一管理、实时监控。

     运维系统主要有两个功能:服务日志的订阅,pingexe。pingexe的大体流程为:1.访问写消息至IBM WebSphere MQ队列管理器的netIN队列。2.MB根据路由规则($Body/MSG/BIZ[contains( $Body/MSG/BIZ/DAT,"APP" )])过滤,转发消息至各APP相应队列。3.各APP反馈消息至netOUT队列。4.利用线程从netOUT读取消息并反回各APP状态。过程中遇到一个很奇怪的问题就是,当我手动发送pingexe消息至netIN队列中时,MB可以将消息转发至相应的队列;但当我用程序发送相同的消息至此队列的时候,消息不能被转发。

      仔细查看了一个程序,终于发现了问题的所在。手动发送的消息与线程发送的消息虽然内容相同,但是格式并不相同。IBM WebSphere 中,存在着自己的消息格式MQ_STRING,而如果我们对发送的消息不加以设置的话,MB并不能辨识我们发送的消息格式,后面的过滤、转发也就没有办法进行了。

      IBM WebSphere 开发过程中,字符集是一个不可忽视的问题。有程序中加入以下几行代码,问题就解决啦:

        #设置md对象

        Sndmd = pymqi.md()
        Sndmd.CodedCharSetId = 1381#1381
        Sndmd.Format = CMQC.MQFMT_STRING

 

        self.qSnd.put(strMsgToQ,Sndmd)#发送

      资料不够啊,各种猜。

你可能感兴趣的:(IBM,WebSphere,MQ,python)