IBM Mq消息头

时间:2010-08-16 12:48:02

标签: ibm-mq head

我正在向远程队列发送消息,我无法控制。

我发送一个xml文件作为消息,但是当应用程序读取消息时,它会获得一个消息头像

<mcd><Msd>jms_text</Msd></mcd>  \0\0\0l<jms><Dst>queue:///TEST</Dst><Tms>1281475843707</Tms><Cid></Cid><Dlv>1</Dlv></jms>

我不希望这个邮件标题存在,我发送此邮件的代码如下:

Properties props = new Properties();
    props.setProperty("java.naming.factory.initial",this.initialFactory);
    props.setProperty("java.naming.provider.url", url);

    Context context = new InitialContext(props);

    QueueConnectionFactory qcf = (QueueConnectionFactory) context.lookup(this.context);
    qConn = qcf.createQueueConnection();
    queue = (Queue)context.lookup(name);
    qSession = qConn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
    qConn.start();
            QueueSender send = qSession.createSender(queue);
     String text = "My xml file";
     TextMessage tm = qSession.createTextMessage(text);
     send.send(tm);
     send.close();

我该如何避免这种情况?

2 个答案:

答案 0 :(得分:9)

您似乎正在向非jms目的地发送jms消息。消息如何在目的地上消耗?是否期望本机MQ消息?接收方不了解存储JMS头属性的MQRFH2头。

您应该配置目标以了解jms,或者您可以执行以下操作来告诉mq jms您的接收器是非jms客户端。

((com.ibm.mq.jms.MQQueue) queue).setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ);

答案 1 :(得分:5)

查看JMS对象as listed in the docs的属性。在被管理对象上有一个名为TARGCLIENT的属性,应该设置为'MQ'。尽管您可能无法控制受管理对象,但管理受管对象的人员有责任正确设置此属性。如果目标不理解RFH2标头(WMQ v6用于保存JMS属性),那么向该目标发送消息的任何WMQ JMS应用程序必须具有该属性集。

顺便说一句,您遇到此问题的事实往往表明应用程序使用消息仍处于v6。请注意,WMQ的v6.0截至2011年9月已停止使用。如果您现在在QMgr和客户端都切换到v7,则可以通过队列本身的简单设置进行管理。遗留应用程序将理解消息,无论它们是否附加了RFH2,并且客户端应用程序将响应视为JMS消息,无论旧应用程序是否添加RFH2标头。现在转到v7,为开发这个应用程序节省了很多麻烦,也避免了明年迁移到v7。

WMQ v7客户端下载可用here

更新:WMQ V6的使用寿命延迟至2012年9月。