具有JMS队列和MQ队列的Websphere

时间:2016-01-29 07:52:20

标签: ibm-mq mq

我是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队列同步?

2 个答案:

答案 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代码用于了解如何打开队列,要使用的属性等的属性。