데드 레터 큐에서 메시지를 보내려합니다. 이를 위해, Dead Letter를 BytesMessage (Payload는 ZIP 또는 String 일 수 있음)로 변환해야합니다. MQ 클래스 (IBM)를 사용하여 Java의 BytesMessage로 데드 레터를 변환하는 방법
는 지금까지 시도하는 것 :) (MQRFH2 클래스 RFH2를 확인하고 추구 :
mqMessage.seek(0); MQRFH2 rfh2 = new MQRFH2(mqMessage); byte[]
data = new byte[mqMessage.getDataLength()];
mqMessage.readFully(data); System.out.println("Message data: "
+new String(data));.
MQHeaderlist에 의해 RFH2를 가져옵니다 :
MQHeaderList list = new MQHeaderList (mqMessage, true); // Step 1.
MQDLH dlh = (MQDLH) list.get (0); // Step 2.
int reason = dlh.getReason(); // Step 3.
list.remove (dlh); // Step 4.
mqMessage = new MQMessage();
list.write (mqMessage, true); // Step 5.
mqMessage.format = list.getFormat(); // Step 6.
MQHeaderIterator it = new MQHeaderIterator(mqMessage);
while (it.hasNext()) {
MQHeader header = it.nextHeader();
System.out.println("Header type " + header.type() + ": " + header);
}
MQRFH2 클래스 RFH2 받기 :
MQHeader header = new MQRFH2(mqMessage);
ByteArrayOutputStream out = new ByteArrayOutputStream();
header.write(new DataOutputStream(out), CMQC.MQENC_NATIVE,
CMQC.MQCCSI_DEFAULT); byte[] bytes = out.toByteArray(); String
sout = new String(bytes); System.out.println(sout);
Nothing 나는이 같은 오류를 얻을 : 나를 위해 일한
MQJE001: Beendigungscode '2', Ursache '6114'.
MQJE001: Beendigungscode '2', Ursache '2195'.
ch.coop.mid.hecol.DAEQHandler.exception.ZDAEQException: com.ibm.mq.headers.MQDataException: MQJE001: Beendigungscode '2', Ursache '2195'.
at ch.coop.mid.hecol.DAEQHandler.bl.impl.ZMQQueueImpl.resendAllLetters(ZMQQueueImpl.java:52)
at ch.coop.mid.hecol.DAEQHandler.ZStart.main(ZStart.java:20)
Caused by: com.ibm.mq.headers.MQDataException: MQJE001: Beendigungscode '2', Ursache '2195'.
at com.ibm.mq.headers.MQDataException.getMQDataException(MQDataException.java:316)
at com.ibm.mq.headers.internal.Header.read(Header.java:620)
at com.ibm.mq.headers.MQRFH2.<init>(MQRFH2.java:113)
at ch.coop.mid.hecol.DAEQHandler.dto.ZMessageDTO.<init>(ZMessageDTO.java:60)
at ch.coop.mid.hecol.DAEQHandler.bl.impl.ZMQQueueImpl.resendAllLetters(ZMQQueueImpl.java:50)
... 1 more
Caused by: com.ibm.mq.headers.MQDataException: MQJE001: Beendigungscode '2', Ursache '6114'.
at com.ibm.mq.headers.MQDataException.getMQDataException(MQDataException.java:313)
at com.ibm.mq.headers.MQRFH2.read(MQRFH2.java:184)
at com.ibm.mq.headers.internal.Header.read(Header.java:639)
at com.ibm.mq.headers.internal.Header.read(Header.java:617)
... 4 more
Caused by: java.io.EOFException: MQJE086: Ausnahmebedingung durch Dateiende ('MQMessage.seek()').
at com.ibm.mq.MQMessage.seek(MQMessage.java:715)
at com.ibm.mq.headers.internal.store.MQMessageStore.readFrom(MQMessageStore.java:274)
at com.ibm.mq.headers.internal.Header.read(Header.java:661)
at com.ibm.mq.headers.MQRFH2.read(MQRFH2.java:181)
작은 부분에 그들을 다시 함께 조립에 전체 메시지를 분할하지 않고 BytesMessage의에 죽은 편지를 변환하는 또 다른 방법이 있나요? 이 방법은 제 의견으로는 너무 아름답 지 않습니다. 그것은 매우 불안정합니다.
편집 : Java에서 mq 라이브러리의 버전 7.5.0.0 만 사용할 수 있습니다.
왜 당신이 메시지를 다시 보내 죽은 편지 핸들러를 사용하지 않는 : 여기
는 코드를 보여야 어떻게? 다시 시도, 전달 등의 규칙을 설정할 수 있습니다. 자세한 정보는 다음 두 링크를 참조하십시오. http://www.ibm.com/support/knowledgecenter/SSKSK_7.5.0/com.ibm.mq.pla.doc/q005540_.htm http://www.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.ref.adm.doc/q083420_.htm – ValerieLampkin
Java 어플리케이션에서 "문제점"을 해결해야하기 때.입니다. @ValerieLampkin –