2012-02-29 2 views
4

Мы отправляем текстовые сообщения XML с помощью определения очереди CLIENT.DATA (очередь передачи, каналы отправки/возврата и т. Д.) Из диспетчера очереди QM_MINE QM_CLIENT и очереди CLIENT.DATA. Сообщение достигает адресата (очередь CLIENT.DATA на клиенте). Проблема заключается в возможности получать сообщения подтверждения (точную копию отправленного сообщения) в локальной очереди CLIENT.DATA.ACK в QM_MINE, как только сообщения доходят до CLIENT.DATA в QM_CLIENT автоматически.Подтверждение WebSphere MQ и ответная очередь

Я нашел пару ресурсов в информационном центре WebSphere v7.1 по адресу reply-to queue и message acknowledgement, однако они мне не очень помогли.

До сих пор я пытался использовать ответ для очереди. Я создал очередь QM_MCT передачи на QM.OCC. Каждое сообщение, отправленное в очередь CLIENT.DATA, я задал очередь ответов, используя метод setJMSReplyTo(). Однако я уверен, что это не так, я больше не хватает.

MQ объектов Резюме:

QM_MINE: CLIENT_DATA (remoteQ), QM_CLIENT (transmitQ), CLIENT_DATA_ACK (localQ)

QM_CLIENT: CLIENT_DATA (localQ), QM_MINE (transmitQ),

И, каналы отправителя/получателя с обоих концов.

Исходный код Fragements:

Отправитель Клиент Data (по сделке):

public class ClientServiceImpl extends JmsGatewaySupport implements ClientService { 

    @Override 
    public void sendClientData(String dataXML) { 
     getJmsTemplate().convertAndSend(dataXML); 
    } 
} 

Преобразователь сообщение:

public Message toMessage(Object o, Session session) throws JMSException, MessageConversionException { 
    String dataXML = (String) o; 
    TextMessage message = session.createTextMessage(); 
    message.setJMSReplyTo(replyToQueue); 
    message.setText(dataXML); 
    return message; 
} 

Примечание:

тока я не иметь MDP или MDB для прослушивания и потреблять сообщения из очереди CLIENT_DATA в QM_CLIENT. Я просто отправляю его из QM_MINE, и он перемещается в QM_CLIENT с помощью MQ. Нужно ли мне потреблять сообщения, чтобы это работало?

Я использую Java, JMS, Spring и WebShere MQ v7.1 для Linux. Дополнительная информация будет предоставлена ​​по запросу.

ответ

3

См. Раздел на поле MQMD.Report. Да, вам нужно установить поля reply-to, чтобы подтверждение могло вернуться к вам. Однако вам также необходимо сообщить WMQ, что вы хотите, чтобы он генерировал сообщение отчета. Для чего вы хотите установить поле MQRO_COA_WITH_FULL_DATA.

+0

Спасибо, Роб. Я получил его работу, добавив строку «message.setIntProperty (WMQConstants.JMS_IBM_REPORT_COA, MQC.MQRO_COA_WITH_FULL_DATA); перед «message.setText (..)». Однако в QM_CLIENT мне пришлось создать удаленную очередь queue для CLIENT_DATA_ACK (вместе с передачей для QM_MINE). Так оно и должно быть? Возможно ли это сделать, не создавая в очереди QM_CLIENT идентификатор удаленной очереди? – arrehman

+1

'QM_CLIENT' должен иметь возможность разрешить маршрут до' QM_MINE'. Если в QM_CLIENT есть XMitQ с именем 'QM_MINE', сообщения должны вернуться. Если этого не произошло, QRemote с именем 'QM_MINE', определенный в' QM_CLIENT', указывая фактическое имя XMitQ (и никакие записи 'RNAME' или' RQMNAME'), не станет хитом. –

+0

Я хочу сделать это без RemoteQ DATA.CLIENT.ACK в QM_CLIENT, поэтому я удалил это и сохранил только QM_MINE XMITQ в QM_CLIENT, однако сообщения replyTo накапливаются в QM_MINE. replyTo имя очереди - DATA.CLIENT.ACK (который находится на QM_MINE, а не QM_CLIENT). Еще что-то не так. – arrehman

Смежные вопросы