Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ibm mq IBM Mq消息头_Ibm Mq_Head - Fatal编程技术网

Ibm mq IBM Mq消息头

Ibm mq IBM Mq消息头,ibm-mq,head,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</Dl

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

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

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

如何避免这种情况?

您似乎正在向非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。请注意,截至2011年9月,WMQ的v6.0已停止使用。如果您现在在QMgr和客户端都切换到v7,您可以通过队列本身的简单设置来管理它。不管消息是否附加了RFH2,遗留应用程序都将理解这些消息,而不管遗留应用程序是否添加RFH2头,客户端应用程序都会将响应视为JMS消息。现在就迁移到v7,省去了开发这个应用程序的很多麻烦,也避免了明年必须迁移到v7

WMQ v7客户端下载可用


更新:WMQ V6的使用期限被推迟到2012年9月。

嘿,谢谢你,伙计,它可以工作了,我刚刚尝试了你的修复。现在我必须理解这意味着什么,因为您在代码中做了变通,而不是设置托管对象,这意味着任何其他向该目的地发送JMS消息的应用程序或模块也会有同样的问题。在受管对象(.bindings文件、LDAP或其他任何文件)中设置它,它在使用该受管对象的所有应用程序中都是固定的。@T.Rob-我同意他应该获得受管对象设置以正确接收jms消息,但从他的问题来看,他似乎无法控制终点。@gwhitake我想知道我们是否在谈论不同的事情。我所指的受管理对象是.bindings文件、LDAP或由本地web应用服务器管理,具体取决于其应用程序的运行方式。因此,即使他无法控制端点,也有人生成了他的应用程序获取的WMQ连接工厂管理的对象。如果该用户设置了targclient,那么使用该托管对象的任何代码都可以不经修改地工作。当然,应用程序甚至可能不使用JNDI获取CF,在这种情况下,这一切都不适用,代码修改是唯一的答案。但是,如果存在托管对象,则不仅可以使用targclient,还可以使用FAILIFQUIESCE和六个其他在运行时非常重要的属性来做正确的事情。可扩展的策略不是在代码中做到这一点,在代码中每个应用都必须意识到差异,正确编码,然后在升级到v7后重新编码,而是在托管对象中做到这一点,在托管对象中,它在许多应用中都得到了利用。
((com.ibm.mq.jms.MQQueue) queue).setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ);