如何使用Java API设置消息选择器?

时间:2015-03-12 17:07:04

标签: java ibm-mq

我尝试编写一个简单的测试用例,根据消息属性从队列中提取消息,点击7.5.0.3 QMgr并使用7.5.0.3客户端jar。

我在网上看到的所有内容都说我需要在打开队列时指定消息选择器。我对此很好,但我只看到两种打开它的方法:

MQQueueManager.accessQueue(
    String queueName, 
    int openOptions);

MQQueueManager.accessQueue(
    String queueName, 
    int openOptions, 
    String queueMgr, 
    String dynamicQueueName, 
    String altUserId);

这些都不允许我指定消息选择器。我是从命令行批处理应用程序运行它,而不是在app服务器中运行,因此无法使用JMS选择器。

以下是有关选择器的IBM文档:WebSphere MQ Message Selectors,它表明选择必须作为MQOPEN调用的一部分进行。

2 个答案:

答案 0 :(得分:4)

MQ JMS API提供您正在寻找的消息选择语法类型。基本MQ Java API基于MessageId和CorrelationId提供消息选择,它还没有提供您正在寻找的类型选择语法。您提供的文档链接适用于MQ C API。

使用MQ JMS API,可以按照此处所示进行消息选择:

      // Create JMS objects
      connection = cf.createConnection();
      session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

      // Create queue destination 
      Destination queDest= session.createQueue(que);

      // Create consumer with selector
      String selector = "category='bucket1'";         
      MessageConsumer cons= session.createConsumer(queDest, selector);

      connection.start();
      // receive messages
      Message inMessage = cons.receive(5000);

答案 1 :(得分:-1)

您应该在尝试从队列中读取消息时指定选择器,如下所示:

            MQMessage ResponseMsg = new MQMessage();
            ResponseMsg.correlationId = CorrelationId;
            MQGetMessageOptions gmo = new MQGetMessageOptions();
            gmo.options = MQConstants.MQGMO_WAIT;
            gmo.waitInterval = WaitTime * 1000;
            gmo.matchOptions = MQConstants.MQMO_MATCH_CORREL_ID;
            ResponseQueue.get(ResponseMsg, gmo);