我是IBM Websphere MQ服务器的新手,在使用它时遇到的问题很少。
我正在使用MQQueueConnectionFactory
向队列发送消息。这是我的代码。
MQQueueConnectionFactory connectionFactory = null;
QueueConnection queueConn = null;
QueueSession queueSession = null;
QueueSender queueSender = null;
TextMessage message = null;
try
{
connectionFactory = new MQQueueConnectionFactory();
connectionFactory.setHostName("192.16.34.45");
connectionFactory.setPort(1415);
connectionFactory.setTransportType(1);
connectionFactory.setQueueManager("MQSLLXQ1");
connectionFactory.setChannel("TO.MQSLLXQ1");
queueConn = connectionFactory.createQueueConnection("username", "password");
queueSession = queueConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
queueSender = queueSession.createSender(queueSession.createQueue("TestQueue"));
queueSender.setDeliveryMode(DeliveryMode.PERSISTENT);
message = queueSession.createTextMessage("Test Message");
queueSender.send(message);
queueConn.close();
} catch (Exception je) {
je.printStackTrace();
}
带有JMS头的MQ队列中可见的消息。
<mcd><Msd>jms_text</Msd></mcd>
<jms><Dst>queue:///TestQueue</Dst><Tms>1454047279356</Tms><Div>2</Div></jms>
Test Message
1)有没有办法避免这个jms头并只获取MQ队列中的有效负载?
2)有没有办法同时将MQ队列和JMS队列同步?
答案 0 :(得分:1)
JMS是API规范,而不是线路级协议规范。因此,不同的供应商有自己的方式来实现JMS API规范。 IBM MQ(a.k.a WebSphere MQ)使用RFH2头来实现JMS API。
1)如果您使用JMS API接收消息,则该标头可作为不同的消息属性提供给应用程序。可以使用message.getBody()
(在MQ v8中)方法检索有效负载。根据消息的类型,即文本,字节等,您可以使用getText(), readBytes()
等方法来检索邮件正文。
如果您的接收应用程序使用MQ API,则可以通过更改队列属性来剥离邮件头。
2)在IBM MQ中,JMS队列实际上指向MQ队列。
答案 1 :(得分:1)
如果您有兴趣使用JMS向传统MQI应用程序发送消息,那么JMS队列的TARGCLIENT option。请注意,这意味着某些JMS属性不会被转移。
正如Shashi先前解释的那样,MQ JMS Queue指向MQ队列;它还具有MQ JMS代码用于了解如何打开队列,要使用的属性等的属性。