MQMD中的messageId表示为24个字节.如果您知道这些生成的平台,您可以通过将字节转换为生成它们的队列管理器的字符集中的字符来为它们的某些部分找到一些含义,但不建议依赖于传输的任何数据在messageID中作为字符数据,因为我看到IBM的语句类似于“MsgId is generated by MQ in an IBM proprietary format and it may change at any time.”
如果要将它们表示为字符串,则应将它们表示为表示24个字节的48个字符的HEX字符串.
下面是IBM在Technote中提供的示例函数getHexString,它将为您执行此转换.你会像这样使用它:
getHexString(theMessage.messageId)
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;
}
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.