繁体   English   中英

IBM Mq消息头

[英]IBM Mq Message Header

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

我发送一个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();

我该如何避免这种情况?

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

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

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

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

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

WMQ v7客户端下载可在此处获得

更新 :WMQ V6的寿命终止已推迟至2012年9月。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM