2015-11-07 124 views
1

我试图将RFH2Header类型设置为消息字符串。但它不附加到消息。 请帮忙。提前致谢!!!! 我的方法是否正确?如果我检查响应队列,则RFH属性将被添加到字节消息中。如何在Java中使用JMS将头设置为字符串

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

问题不是很清楚。您是否想将RFH2类型的数据作为正文添加到JMS消息中?或者将RFH2类型的数据设置为JMS消息头? – Shashi

回答

1

不是关于这个问题很清楚,但在任何情况下,下面可能是有用的给你。

RFH2是MQ特定的,而JMS是标准的。 MQ JMS应用程序无法将RFH2数据明确设置为JMS消息标头。 MQ消息正在发送时,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

+0

是否可以修改答案,以显示如何在JMS中执行子项?试图使用句点来创建子项像“MyColor.Red”会导致JMSCC0049异常被抛出。知识中心没有显示如何做到这一点的任何示例。 – crashdog

+0

有趣的是,让我在稍后的笔记本电脑上试用我的笔记本电脑。 – Shashi

+0

我也尝试设置一个包含句点的属性名称,并得到相同的错误。根据https://www.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.mig.doc/q001730_.htm中的此文档,属性名称不得包含句点。建议您使用下划线而不是句号。 – Shashi

相关问题