
如何将messageId从byte []转换为字符串?
我尝试了几次转换,但不是它们有效:
new String(theMessage.messageId)
new String(theMessage.messageId, "UTF-8")
new String(theMessage.messageId, "UTF-16")
theMessage.messageId.toString()
如果要将它们表示为字符串,则应将它们表示为表示24个字节的48个字符的HEX字符串.
下面是IBM在Technote中提供的示例函数getHexString,它将为您执行此转换.你会像这样使用它:
getHexString(theMessage.messageId)
以下示例函数来自IBM MQ Technote“How to match correlation id’s when request is made via JMS application and reply generated from base Java API”
public static String getHexString(byte[] b) throws Exception {
String result = "";
for (int i=0; i < b.length; i++) {
result += Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring( 1 );
}
return result;
}
IBM记录知识中心页面“Reference>Developing applications reference>MQI applications reference>Data types used in the MQI>MQMD – Message descriptor>Fields>MsgId (MQBYTE24)”底部的队列管理器生成的消息ID的格式和唯一性
A MsgId generated by the queue manager consists of a 4-byte product identifier (AMQ¬ or CSQ¬ in either ASCII or EBCDIC, where ¬ represents a blank character), followed by a product-specific implementation of a unique string. In IBM® MQ this contains the first 12 characters of the queue-manager name, and a value derived from the system clock. All queue managers that can intercommunicate must therefore have names that differ in the first 12 characters, in order to ensure that message identifiers are unique. The ability to generate a unique string also depends on the system clock not being changed backward. To eliminate the possibility of a message identifier generated by the queue manager duplicating one generated by the application, the application must avoid generating identifiers with initial characters in the range A through I in ASCII or EBCDIC (X’41’ through X’49’ and X’C1′ through X’C9′). However, the application is not prevented from generating identifiers with initial characters in these ranges.
转载注明原文:java – 以字符串格式获取MQ messageId - 乐贴网