Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有JMSTimestamp的MQ消息选择器_Java_Jms_Selector_Ibm Mq - Fatal编程技术网

Java 带有JMSTimestamp的MQ消息选择器

Java 带有JMSTimestamp的MQ消息选择器,java,jms,selector,ibm-mq,Java,Jms,Selector,Ibm Mq,我已使用以下选择器创建了一个MQ接收器: String selector = "JMSTimestamp BETWEEN 1446297200000 AND 1552479882777" 当我运行代码时,选择器会拾取超出这些界限的消息,而不会拾取实际应该拾取的消息。 日志片段如下所示: **lines**** --------- Receiving messages from MQ. --------- Created consumer with Message selector JMSTim

我已使用以下选择器创建了一个MQ接收器:

String selector = "JMSTimestamp BETWEEN 1446297200000 AND 1552479882777"
当我运行代码时,选择器会拾取超出这些界限的消息,而不会拾取实际应该拾取的消息。 日志片段如下所示:

**lines****
--------- Receiving messages from MQ.
--------- Created consumer with Message selector JMSTimestamp BETWEEN 1446297200000 AND 1552479882777.
--------- Receiving messages.
--------- Message type is text.
--------- JMSTimestamp is 1552480011190.
--------- JMSTimestamp with format Mar 13,2019 13:26:51 .
--------- Processing Message.
***lines***
正如我们在日志中所看到的,消息的JMSTimeStamp大于选择器上限155247988277中提到的值

选择器中有什么错误,应该如何写入?请帮忙分析

完整代码如下:

      @Cleanup
      QueueConnection connection = null;
      @Cleanup
      QueueSession session = null;
      @Cleanup
      MessageConsumer receiver = null;
      @Cleanup
      InitialContext ctx = null;
      ctx = new InitialContext();
      QueueConnectionFactory cf = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);
      connection = (QueueConnection) cf.createQueueConnection();
      session = (QueueSession) connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
      log.info("Receiving Message from MQ");
      Queue replyQueue = (Queue) session.createQueue(REPLY_QUEUE);
      //getting time till 3 minutes ago
      Long threeMinutesAgo = System.currentTimeMillis() - 180000;
      // below expression is to select messages which are sitting in queue for more than 3 minutes,
      String messageSelector = "JMSTimestamp BETWEEN 1446297200000 AND " + threeMinutesAgo;
      receiver = (MessageConsumer) session.createConsumer(replyQueue, messageSelector);
      log.info("created Consumer with message selector {}", messageSelector);
      connection.start();
      while (true) {
        log.info("------------receiving response--------------");
        Message asyncMessage = receiver.receiveNoWait();
        if (asyncMessage instanceof TextMessage) {
          log.info("Message type is text");
          log.info("JMSTimeStamp is {}", String.valueOf(asyncMessage.getJMSTimestamp()));
          log.info("JMSTimeStamp with format {}", sdf.format(new Date(asyncMessage.getJMSTimestamp())));
          log.info("ThreeMinutesAgo with format {}", sdf.format(new Date(threeMinutesAgo)));
          log.info("Difference is {}", String.valueOf(System.currentTimeMillis() - asyncMessage.getJMSTimestamp()));
          log.info("Difference with format {}",
              sdf.format(new Date(System.currentTimeMillis() - asyncMessage.getJMSTimestamp())));
          String replyString = ((TextMessage) asyncMessage).getText();
          asyncMessage.acknowledge();
          processIntoText(replyString);
        } if (asyncMessage == null) {
          log.error("Queue is now empty for specified messages or null. ");
          break;
        }
      }
    } catch (JMSException | JAXBException | ParserConfigurationException | SAXException | NamingException e) {
      log.error("Error in messaging {}", e);
    }

选择器的语法在我看来是正常的。它仍然不起作用。您是否尝试过使用另一种语法,如
jmstiestamp>=1446297200000和jmstiestamp是的,即使这样也不起作用您的选择器看起来是正常的,这意味着您的代码如何将选择器应用于消息消费中可能存在错误。您只提供了应用程序的系统输出,而没有提供代码,因此很难说。选择器的语法在我看来是正常的。它仍然不起作用。您是否尝试过使用另一种语法,如
jmstiestamp>=1446297200000和jmstiestamp是的,即使这样也不起作用您的选择器看起来正常,这意味着您的代码将选择器应用于消息消费的方式可能存在缺陷。您只提供了应用程序的系统输出,而没有提供代码,因此很难判断。