簡體   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