Как прочитать сообщение IBM MQ на основе идентификатора сообщения в коде Java (клиент IBM MQ)

Мне нужно реализовать код для чтения сообщения из IBM MQ, передав идентификатор сообщения, программа, которую я реализую, будет читать одно сообщение за раз, но мой код не охватывает идентификатор сообщения

public final void ReadMessage (String queueName) throws Exception { 
int options = MQC.MQOOINQUIRE + MQC.MQOOFAILIFQUIESCING + MQC.MQOOINPUTSHARED; 
System.out.printin ("start Creating the Queue....... )
MQQueue myQueue = this.mqManager.accessQueue(queueName, options) ; 

MQMessage mgMessage = new MQMessage ( ) ; 
MQGetMessageOptions gmo = new MQGetMessageOptions ( ) ; 
gmo.options = MQC.MQGMO NO WAIT + MQC.MQGMO FAIL IF QUIESCING; 
gmo.matchOptions = MQC.MQMO NONE; 
gmo.waitlnterval = 15000; 
try { 
System.out.println("end of get Message from myqueue") ; 
System.out.print In ("Message lenth" + mgMessage ( ) ) ; 
mgMessage.characterSet = 300; 
int length = mqMessage.getMessageLength( ); 

System. out ( of the message" + length) ; 
System. out ( of the message" + mgMessage.readString(length)) ; 
gmo.options = MQC.MQGMOWAIT | MQC.MQGMOBROWSENEXT; 
}
catch (Exception e) { 
}
}

Этот код может прочитать 1 сообщение из очереди. но мне нужно передать идентификатор сообщения и на основе идентификатора сообщения мне нужно прочитать сообщение.

Возможно ли это требование? Если да, поделитесь со мной образцом для клиента IBM MQ.

хотел бы знать, как передать идентификатор сообщения в коде.

MQQueue myQueue = this.mqManager.accessQueue(queueName, options, MessageID) ;

Спасибо


person stacktome    schedule 28.03.2019    source источник


Ответы (2)


Вы можете использовать messageId при выполнении операции MQGET. Что-то вроде

MQGetMessageOptions gmo = new MQGetMessageOptions(); 
gmo.matchOptions = MQC.MQMO_MATCH_MSG_ID;
mgMessage.messageId=messageId;

На следующей странице также рассказывается о том, как получить сообщение на основе MessageId, CorrelId или groupId https://www.ibm.com/support/knowledgecenter/SSFKSJ_8.0.0/com.ibm.mq.ref.dev.doc/q097550_.htm< /а>

person subbaraoc    schedule 28.03.2019

Стандарт IBM MQ для сценария запрос/ответ предназначен для приложения запроса:

  • сохранить идентификатор сообщения после MQPUT в серверное приложение
  • серверное приложение сохраняет идентификатор сообщения входящего сообщения. сервер
  • серверное приложение создает ответное сообщение, оно будет хранить сохраненный идентификатор сообщения в поле идентификатора корреляции исходящего сообщения.
  • запрашивающее приложение выдаст MQGET, используя сохраненный идентификатор сообщения в поле идентификатора корреляции.

Пример:

Шаг №1 для запроса приложения (ввод сообщения запроса):

MQPutMessageOptions pmo = new MQPutMessageOptions();

MQMessage requestMsg = new MQMessage();
requestMsg.messageId = CMQC.MQMI_NONE;
requestMsg.correlationId = CMQC.MQCI_NONE;
requestMsg.format = CMQC.MQFMT_STRING;
requestMsg.messageType = CMQC.MQMT_REQUEST;
requestMsg.replyToQueueManagerName = qMgrName;
requestMsg.replyToQueueName = replyQName;
requestMsg.writeString("This is a test message");
outQ.put(requestMsg, pmo);

byte[] savedMsgId = requestMsg.messageId;

Шаг №2 для запроса заявки (получение ответного сообщения):

MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = CMQC.MQGMO_FAIL_IF_QUIESCING;
gmo.matchOptions = CMQC.MQMO_MATCH_CORREL_ID;
MQMessage replyMsg = new MQMessage();
replyMsg.messageId = CMQC.MQMI_NONE;

// Specifically get the message with the matching value.
replyMsg.correlationId = savedMsgId;

inQ.get(replyMsg, gmo);
person Roger    schedule 29.03.2019