デッドレターキューからメッセージを再送信したいですか?そのためには、デッドレターをBytesMessage(ペイロードは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);
何も私はこの1つのように、エラーが発生します::私のために働いた
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のみを使用できます。
は、なぜあなたは、メッセージを再送信するためにデッド・レター・ハンドラを使用していませんか?再試行、転送などのルールを設定できます。詳細は、次の2つのリンクを参照してください。http://www.ibm.com/support/knowledgecenter/SSFKSJ_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 –