IBM MQ 发送消息
IBM MQ Send message
我可以通过 Java 测试 class 发送消息。能够在控制台中看到字符串消息。但是在日志中更新它时,我得到了一个空响应。我收到此错误 "Invalid Demand Code"。谁能帮我解决这个问题?
谁能建议我如何将 JMSTextMessage
转换为 JMSBytesMessage
IBM MQ 通过 Java 测试 Class 发送字节消息。
任何帮助都会有帮助
MQQueueConnectionFactory cf = new MQQueueConnectionFactory();
cf.setHostName("");
cf.setPort();
cf.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP);
cf.setQueueManager("");
cf.setChannel("");
MQQueueConnection connection = (MQQueueConnection) cf.createQueueConnection();
MQQueueSession session = (MQQueueSession) connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
MQQueue queue = (MQQueue) session.createQueue("");
MQQueueSender sender = (MQQueueSender) session.createSender(queue);
long uniqueNumber = System.currentTimeMillis() % 1000;
JMSTextMessage message = (JMSTextMessage) session.createTextMessage("B+VCTR||*RPI/LAX/8548|16MAR+B+");
connection.start();
System.out.println("before Sent message:\n" + message);
sender.send(message);
System.out.println("Sent message:\n" + message);
sender.close();
session.close();
connection.close();
System.out.println("\nSUCCESS\n");
}
catch (JMSException jmsex) {
System.out.println(jmsex);
System.out.println("\nFAILURE2\n");
}
catch (Exception ex) {
System.out.println(ex);
System.out.println("\nFAILURE1\n");
}
}
}
以下两种方法演示如何在 BytesMessage 中传递 UTF-8 编码的文本:
Message createBytesMessage(Session session, String text) throws JMSException {
Charset charset = Charset.forName("UTF-8");
byte[] data = text.getBytes(charset);
BytesMessage bmsg = session.createBytesMessage();
bmsg.writeBytes(data);
return bmsg;
}
String readBytesMessage(BytesMessage bmsg) throws JMSException {
int len = (int) bmsg.getBodyLength();
byte[] data = new byte[len];
bmsg.readBytes(data);
Charset charset = Charset.forName("UTF-8");
String text = new String(data, charset);
return text;
}
本质上,BytesMessage 用于发送字节数组。要使用 BytesMessages 传递文本,首先要将文本转换为字节。这里我使用了 UTF-8 编码来对文本进行编码。任何其他人都可以;只需使用相同的字符集进行读写。您甚至可以通过将字符集名称作为消息的字符串 属性 发送来参数化字符集(与 HTTP 字符集参数相同的想法)。
在处理 TextMessage 时,IBM MQ 将隐式进行消息转换和编码。大多数情况下,这是不需要的行为,因为它不能很好地处理 unicode 字符。 here 描述了这种转换的规则。要避免此行为,请使用 BytesMessages 来传递文本。
那么如何将TextMessage转成BytesMessage呢?
从 TextMessage 读取文本。比将其作为新的 BytesMessage 发送。
我可以通过 Java 测试 class 发送消息。能够在控制台中看到字符串消息。但是在日志中更新它时,我得到了一个空响应。我收到此错误 "Invalid Demand Code"。谁能帮我解决这个问题?
谁能建议我如何将 JMSTextMessage
转换为 JMSBytesMessage
IBM MQ 通过 Java 测试 Class 发送字节消息。
任何帮助都会有帮助
MQQueueConnectionFactory cf = new MQQueueConnectionFactory();
cf.setHostName("");
cf.setPort();
cf.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP);
cf.setQueueManager("");
cf.setChannel("");
MQQueueConnection connection = (MQQueueConnection) cf.createQueueConnection();
MQQueueSession session = (MQQueueSession) connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
MQQueue queue = (MQQueue) session.createQueue("");
MQQueueSender sender = (MQQueueSender) session.createSender(queue);
long uniqueNumber = System.currentTimeMillis() % 1000;
JMSTextMessage message = (JMSTextMessage) session.createTextMessage("B+VCTR||*RPI/LAX/8548|16MAR+B+");
connection.start();
System.out.println("before Sent message:\n" + message);
sender.send(message);
System.out.println("Sent message:\n" + message);
sender.close();
session.close();
connection.close();
System.out.println("\nSUCCESS\n");
}
catch (JMSException jmsex) {
System.out.println(jmsex);
System.out.println("\nFAILURE2\n");
}
catch (Exception ex) {
System.out.println(ex);
System.out.println("\nFAILURE1\n");
}
}
}
以下两种方法演示如何在 BytesMessage 中传递 UTF-8 编码的文本:
Message createBytesMessage(Session session, String text) throws JMSException {
Charset charset = Charset.forName("UTF-8");
byte[] data = text.getBytes(charset);
BytesMessage bmsg = session.createBytesMessage();
bmsg.writeBytes(data);
return bmsg;
}
String readBytesMessage(BytesMessage bmsg) throws JMSException {
int len = (int) bmsg.getBodyLength();
byte[] data = new byte[len];
bmsg.readBytes(data);
Charset charset = Charset.forName("UTF-8");
String text = new String(data, charset);
return text;
}
本质上,BytesMessage 用于发送字节数组。要使用 BytesMessages 传递文本,首先要将文本转换为字节。这里我使用了 UTF-8 编码来对文本进行编码。任何其他人都可以;只需使用相同的字符集进行读写。您甚至可以通过将字符集名称作为消息的字符串 属性 发送来参数化字符集(与 HTTP 字符集参数相同的想法)。
在处理 TextMessage 时,IBM MQ 将隐式进行消息转换和编码。大多数情况下,这是不需要的行为,因为它不能很好地处理 unicode 字符。 here 描述了这种转换的规则。要避免此行为,请使用 BytesMessages 来传递文本。
那么如何将TextMessage转成BytesMessage呢?
从 TextMessage 读取文本。比将其作为新的 BytesMessage 发送。