IBM MQ消息侦听器

x1a*_*1a0 5 java jms ibm-mq

您有没有人知道如何使用IBM MQ创建消息监听器?我知道如何使用JMS规范来完成它,但我不知道如何为IBM MQ做到这一点.非常感谢任何链接或指针.

T.R*_*Rob 6

虽然前面的响应者有一个WMQ Java API,但WMQ也支持JMS,所以这里有一些资源可以帮助你入门.

查看本文:IBM WebSphere开发者技术期刊:在WebSphere MQ V6.0上运行独立的Java应用程序

此外,如果您已经安装了完整的WMQ客户端而不仅仅是抓住了罐子,那么您将安装大量示例代码.默认情况下,这些将存在于C:\ Program Files\IBM\WebSphere MQ\tools\_Jms或/ opt/mqm/samp中,具体取决于您的平台.

如果您需要WMQ客户端安装媒体,请在此处获取.请注意,这是WMQ v7客户端,而不是v6客户端.它与v6 QMgr兼容,但由于v6是截至2011年9月的寿命终止,你应该在v7客户端上进行新的开发,如果可能的话,还应该使用v7 QMgr.如果双方都是v7,那么可以使用许多功能和性能增强功能.

如果需要,您可以在此处获取产品手册.

最后,请确保在获得JMS异常时打印链接的异常.这不是WMQ的事情,而是JMS的事情.Sun为JMS异常提供了一个多级数据结构,而真正有趣的部分通常是嵌套级别.这不是什么大问题,可以用几行来实现:

try {
  .
  . code that might throw a JMSException
  .
} catch (JMSException je) {
  System.err.println("caught "+je);
  Exception e = je.getLinkedException();
  if (e != null) {
    System.err.println("linked exception: "+e);
  } else {
    System.err.println("No linked exception found.");
  }
}
Run Code Online (Sandbox Code Playgroud)

这有助于确定JMS错误与传输错误之间的差异.例如,JMS安全性错误可能是WMQ 2035,或者它可能是JSSE配置,或者应用程序可能无法访问文件系统中的某些内容.其中只有一个值得花费大量时间来挖掘WMQ错误日志,并且只有通过打印链接的异常才能判断它是否是那个.


Dro*_*roo 5

查看IBM Help:编写WebSphere MQ基础Java应用程序

IBM有一个用于与队列交互的API.这是他们的样本:

import com.ibm.mq.*;            // Include the WebSphere MQ classes for Java package


public class MQSample
{
  private String qManager = "your_Q_manager";  // define name of queue
                                               // manager to connect to.
  private MQQueueManager qMgr;                 // define a queue manager
                                               // object
  public static void main(String args[]) {
     new MQSample();
  }

  public MQSample() {
   try {

      // Create a connection to the queue manager

      qMgr = new MQQueueManager(qManager);

      // Set up the options on the queue we wish to open...
      // Note. All WebSphere MQ Options are prefixed with MQC in Java.

      int openOptions = MQC.MQOO_INPUT_AS_Q_DEF |
                        MQC.MQOO_OUTPUT ;

      // Now specify the queue that we wish to open,
      // and the open options...

      MQQueue system_default_local_queue =
              qMgr.accessQueue("SYSTEM.DEFAULT.LOCAL.QUEUE",
                               openOptions);

      // Define a simple WebSphere MQ message, and write some text in UTF format..

      MQMessage hello_world = new MQMessage();
      hello_world.writeUTF("Hello World!");

      // specify the message options...

      MQPutMessageOptions pmo = new MQPutMessageOptions(); // accept the // defaults,
                                                           // same as MQPMO_DEFAULT

      // put the message on the queue

      system_default_local_queue.put(hello_world,pmo);

      // get the message back again...
      // First define a WebSphere MQ message buffer to receive the message into..

      MQMessage retrievedMessage = new MQMessage();
      retrievedMessage.messageId = hello_world.messageId;

      // Set the get message options...

      MQGetMessageOptions gmo = new MQGetMessageOptions(); // accept the defaults
                                                           // same as  MQGMO_DEFAULT
      // get the message off the queue...

      system_default_local_queue.get(retrievedMessage, gmo);

      // And prove we have the message by displaying the UTF message text

      String msgText = retrievedMessage.readUTF();
      System.out.println("The message is: " + msgText);
      // Close the queue...
      system_default_local_queue.close();
      // Disconnect from the queue manager

      qMgr.disconnect();
    }
      // If an error has occurred in the above, try to identify what went wrong
      // Was it a WebSphere MQ error?
    catch (MQException ex)
    {
      System.out.println("A WebSphere MQ error occurred : Completion code " +
                         ex.completionCode + " Reason code " + ex.reasonCode);
    }
      // Was it a Java buffer space error?
    catch (java.io.IOException ex)
    {
      System.out.println("An error occurred whilst writing to the message buffer: " + ex);
    }
  }
} // end of sample
Run Code Online (Sandbox Code Playgroud)

我不确定IBM罐子是否位于基础Maven回购中.我知道在过去我必须从本地IBM安装中提取它们并将它们放在本地SVN仓库中.我正在使用以下罐子:

<dependency>
    <groupId>com.ibm</groupId>
    <artifactId>com.ibm.mq</artifactId>
    <version>5.3.00</version>
    <scope>compile</scope>
</dependency>
    <dependency>
    <groupId>com.ibm</groupId>
    <artifactId>com.ibm.mq.pcf</artifactId>
    <version>5.3.00</version>
    <scope>compile</scope>
</dependency>
    <dependency>
    <groupId>com.ibm</groupId>
    <artifactId>com.ibm.mqbind</artifactId>
    <version>5.3.00</version>
    <scope>compile</scope>
</dependency>
    <dependency>
    <groupId>com.ibm</groupId>
    <artifactId>com.ibm.mqjms</artifactId>
    <version>5.3.00</version>
    <scope>compile</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)