Заголовок сообщения IBM Mq - PullRequest
5 голосов
/ 16 августа 2010

Я отправляю сообщения в удаленную очередь, которой я не могу управлять.

Я отправляю 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 ]

9 голосов
/ 16 августа 2010

Похоже, что вы отправляете сообщение jms адресату, отличному от jms.Как сообщение используется в пункте назначения?Ожидается ли собственное сообщение MQ?Приемник не понимает заголовок MQRFH2, в котором хранятся свойства заголовка JMS.

Вы должны либо сконфигурировать адресат для понимания jms, либо вы можете сделать что-то вроде следующего, чтобы сообщить mq jms, что ваш приемник не являетсяJMS-клиент.

((com.ibm.mq.jms.MQQueue) queue).setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ);
5 голосов
/ 16 августа 2010

Посмотрите на свойства для объектов JMS , перечисленные в документах .На администрируемом объекте есть свойство TARGCLIENT, которое должно быть установлено в «MQ».Хотя вы не можете контролировать управляемый объект, ответственность за правильную настройку этого свойства лежит на лице, которое управляет управляемыми объектами.Если пункт назначения не понимает заголовки RFH2 (который WMQ v6 использует для хранения свойств JMS), то любые приложения WMQ JMS, которые отправляют сообщения этому пункту , должны иметь это свойство установленным.

Кстати,тот факт, что у вас возникла эта проблема, как правило, указывает на то, что сообщения, использующие приложение, все еще находятся на уровне v6.Обратите внимание, что с сентября 2011 года версия v6.0 WMQ устарела. Если вы переключитесь на версию v7 ​​сейчас как на стороне QMgr, так и на стороне клиента, вы сможете управлять этим с помощью простых настроек в самой очереди.Устаревшее приложение будет понимать сообщения независимо от того, к ним ли подключен RFH2, а клиентское приложение будет видеть ответы как сообщения JMS, независимо от того, добавляет ли устаревшее приложение заголовки RFH2.Перейдите к v7 сейчас, избавьте себя от множества проблем при разработке этого приложения, а также избегайте перехода на v7 в следующем году.

Доступны загрузки клиента WMQ v7 здесь

Обновление : Окончание срока службы WMQ V6 перенесено на сентябрь 2012 года.

...