2010-08-16 7 views
5

Я отправляю сообщения в удаленную очередь, к которой у меня нет контроля.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(); 

Как этого избежать?

ответ

9

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

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

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

эй спасибо, будем стараться его, и пусть вы знаете –

+0

эй спасибо чувак, он работает, я просто попробовал исправить. теперь я должен понять, что это значит –

+0

Ну, так как вы сделали обходной путь кода, а не устанавливали управляемый объект, это означает, что любые другие приложения или модули, отправляющие JMS-сообщения этому месту назначения, также будут иметь такую ​​же проблему. Установите его в управляемых объектах (файл .bindings, LDAP или что-то еще), и он исправлен без кода и во всех приложениях, используя этот управляемый объект. –

5

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

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

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

Update: Конец срока службы для WMQ V6 был перенесен на сентябрь 2012 года