我正在尝试将RFH2Header类型设置为消息字符串。但它没有附加到消息上。 请帮忙。提前致谢!!!! 我的方法是正确的吗?如果我检入响应队列,RFH属性将被添加到字节消息。
String message1 = "MQ Message header test";
Message message11 = session.createTextMessage(message1);
MQRFH2 header = new MQRFH2();
ByteArrayOutputStream out = new ByteArrayOutputStream ();
DataOutput dout = new DataOutputStream(out);
header.write(dout);
byte[] outheaders = out.toByteArray();
byte[] bArray = message1.getBytes("UTF-8");
BytesMessage responseMessage = session.createBytesMessage(); // throws JMSException
responseMessage.writeBytes(outheaders);
responseMessage.writeBytes(bArray);
responseMessage.setJMSType("MQRFH2");
responseMessage.setJMSCorrelationID("12345678900000");
responseMessage.setJMSDeliveryMode(2);
responseMessage.setJMSPriority(4);
responseMessage.setJMSReplyTo(queue);
responseMessage.setStringProperty("JMS_IBM_Format", "MQRFH2");
responseMessage.setIntProperty("JMS_IBM_Encoding", MQConstants.MQENC_NATIVE);
responseMessage.setIntProperty("JMS_IBM_Character_Set", 1208);
responseMessage.setIntProperty("JMS_IBM_PutApplType", 11);
producer.send(responseMessage);
我的输出在响应队列中如下所示..,请帮助,如何将标头设置为字符串
00000 4D 51 20 4D 65 73 73 61--67 65 20 68 65 61 64 65 |MQ Message heade|
00010 72 20 74 65 73 74 52 46--48 20 00 00 00 02 00 00 |r testRFH ......|
00020 00 24 00 00 00 00 00 00--00 00 20 20 20 20 20 20 |.$........ |
00030 20 20 00 00 00 00 00 00--04 B8 | .......� |
答案 0 :(得分:1)
对于这个问题不太清楚,但无论如何以下内容可能对您有用。
RFH2是MQ特定的,而JMS是标准。 MQ JMS应用程序无法将RFH2数据显式设置为 JMS消息头。 MQ JMS客户端在内部设置所需的RFH2标头,以便在发送消息时构建JMS消息。应用程序只能使用setJMSxxxx
和使用setxxxProperty
方法的用户定义属性设置消息正文和许多JMS属性。例如,下面的代码段设置了一个名为MyStringProperty
的字符串类型属性。
responseMessage.setStringProperty("MyStringProperty", "SomeString Data");
RFH2数据将是一个字节流,具有固定的标题部分和可变数据部分,如下所述:http://www-01.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.dev.doc/q032000_.htm?lang=en。因此,如果您想要将消息 消息 消息 中的RFH2数据一起发送,则需要创建BytesMessage
。