Как читать сообщения IBM MQ на основе идентификатора сообщения через код Java (клиент IBM MQ) - PullRequest
0 голосов
/ 28 марта 2019

Мне нужно реализовать код для чтения сообщения из 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 Client.

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

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

Спасибо

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

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

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

Пример:

Шаг № 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);
0 голосов
/ 28 марта 2019

Вы можете использовать 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

...