【发布时间】:2018-05-31 01:02:34
【问题描述】:
我在向 MQ 发送消息时设置关联 ID。我需要使用我推送的消息的 COA 中的 CorrelationID 进行进一步处理。
我正在使用以下代码设置关联 ID 并将消息发送到队列。
MQMessage message = createMQMessage("12345");
message.write("Some message to push".getBytes());
queue.put(message);
private MQMessage createMQMessage(String corrID){
MQMessage message = new MQMessage();
message.messageFlags = MQConstants.MQMF_SEGMENTATION_ALLOWED;
if (ackQueueName != null) {
message.messageType = MQConstants.MQMT_REQUEST;
message.replyToQueueManagerName = ackQueueManagerName;
message.replyToQueueName = ackQueueName;
message.report = MQConstants.MQRO_COA | MQConstants.MQRO_COD;
message.correlationId = corrID.getBytes();
}
return message;
}
我正在从另一个应用程序读取 replyQueue 以获取 COA 并提取相关 ID 以进行进一步处理。
但是相关 ID 是 byte[] 格式,我使用下面的方法 getHexString 来获取字符串。但我得到的只是我的相关 ID 的 48 位十六进制格式,例如
414d5120514d41444556202020202020b5ca0d5b13b3bb20
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;
}
我需要的只是将 48digit HexString 转换为我设置的原始关联 ID 的方法。我尝试使用以下方法进行转换,但它给了我垃圾数据。
public static String hexStringToByteArray(String hex) {
int l = hex.length();
byte[] data = new byte[l/2];
for (int i = 0; i < l; i += 2) {
data[i/2] = (byte) ((Character.digit(hex.charAt(i), 16) << 4)
+ Character.digit(hex.charAt(i+1), 16));
}
return new String(data);
}
【问题讨论】:
-
Arrays.toString[byte[]) -
ok.. 我不是在问如何将 byte[] 转换为 String。我可以使用方法
getHexString获取字符串。 MQ 管理器在内部将字符串转换为十六进制..我只想将十六进制字符串转换为原始字符串格式..我正在编辑我的问题以使其清楚..对不起..!! -
new String (byte[]) -
COA 消息在响应的相关 ID 中返回请求的消息 ID。
-
@JoshMc 非常感谢.. 这就是问题所在。我自己设置了消息 ID,现在可以了。