如何使用JMS

时间:2015-11-07 07:40:40

标签: jms websphere ibm-mq mq

我正在尝试将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                    |  .......�      |

1 个答案:

答案 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