5

制御できないリモート キューにメッセージを送信しています。

メッセージとして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();

どうすればこれを回避できますか?

4

2 に答える 2

9

jmsメッセージをjms以外の宛先に送信しているようです。メッセージは宛先でどのように消費されていますか?ネイティブMQメッセージを期待していますか?受信者は、JMSヘッダープロパティを格納するMQRFH2ヘッダーを理解していません。

jmsを理解するように宛先を構成するか、次のようにして、レシーバーが非jmsクライアントであることをmqjmsに通知する必要があります。

((com.ibm.mq.jms.MQQueue) queue).setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ);
于 2010-08-16T13:55:49.487 に答える
5

docs にリストされているJMSオブジェクトのプロパティを見てください。管理対象オブジェクトには、「MQ」に設定する必要がある TARGCLIENT というプロパティがあります。管理対象オブジェクトを制御できない場合でも、このプロパティを正しく設定するのは管理対象オブジェクトの管理者の責任です。宛先が RFH2 ヘッダー (WMQ v6 が JMS プロパティを保持するために使用) を認識しない場合、その宛先にメッセージを送信する WMQ JMS アプリケーションには、そのプロパティ セットが必要です。

ちなみに、この問題が発生しているという事実は、メッセージを消費するアプリケーションがまだ v6 であることを示している傾向があります。WMQ の v6.0 は 2011 年 9 月の時点でサポートが終了していることに注意してください。QMgr とクライアント側の両方で v7 に切り替えると、キュー自体の簡単な設定でこれを管理できます。レガシ アプリは、メッセージに RFH2 が添付されているかどうかに関係なくメッセージを認識し、クライアント アプリは、レガシ アプリが RFH2 ヘッダーを追加するかどうかに関係なく、応答を JMS メッセージとして認識します。今すぐ v7 に移行して、このアプリを開発する手間を省き、来年 v7 に移行する必要がないようにしてください。

WMQ v7 クライアントのダウンロードはこちらから入手できます

更新: WMQ V6 のサポート終了は 2012 年 9 月に延期されました。

于 2010-08-16T18:22:53.650 に答える