Java 无法从activemq队列中删除特定消息

Java 无法从activemq队列中删除特定消息,java,jms,activemq,Java,Jms,Activemq,我正在尝试使用java获取activeMQ队列中所有消息的列表,并根据它们的ID删除其中一条消息。我的代码如下所示: Connection connection = connectionFactory.createConnection("username","password"); connection.start(); Session session = connection.createSession(false,Session.AUTO_AC

我正在尝试使用java获取activeMQ队列中所有消息的列表,并根据它们的ID删除其中一条消息。我的代码如下所示:

Connection connection = connectionFactory.createConnection("username","password");
            connection.start();
            Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
            Destination topicDestination = session.createQueue(queue_name);
            QueueBrowser browser = session.createBrowser((Queue) topicDestination);
            Enumeration<?> messages = browser.getEnumeration();
            int count=0;
            while( messages.hasMoreElements()){
                count++;
                TextMessage messageInTheQueue = (TextMessage)messages.nextElement();
                System.out.println("Message "+count+" in the queue:" );
                System.out.println(messageInTheQueue.getJMSMessageID());
                System.out.println(messageInTheQueue.getText());
                System.out.println("===============================================");
                System.out.println(" ");
Connection connection = connectionFactory.createConnection("username","password");
            Session session = connection.createSession(true,Session.AUTO_ACKNOWLEDGE);
            Destination topicDestination = session.createQueue(queue_name);
            MessageConsumer consumer = session.createConsumer(topicDestination, "JMSMessageID="+message_id); 
            connection.start(); 
            consumer.receive();
            consumer.close(); 
            session.commit(); 
            session.close(); 
            connection.stop();
我使用我获得的ID,例如第二个ID消息1-server-42764-1483561148119-0:0:1:1:2来使用或删除消息,如下所示:

Connection connection = connectionFactory.createConnection("username","password");
            connection.start();
            Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
            Destination topicDestination = session.createQueue(queue_name);
            QueueBrowser browser = session.createBrowser((Queue) topicDestination);
            Enumeration<?> messages = browser.getEnumeration();
            int count=0;
            while( messages.hasMoreElements()){
                count++;
                TextMessage messageInTheQueue = (TextMessage)messages.nextElement();
                System.out.println("Message "+count+" in the queue:" );
                System.out.println(messageInTheQueue.getJMSMessageID());
                System.out.println(messageInTheQueue.getText());
                System.out.println("===============================================");
                System.out.println(" ");
Connection connection = connectionFactory.createConnection("username","password");
            Session session = connection.createSession(true,Session.AUTO_ACKNOWLEDGE);
            Destination topicDestination = session.createQueue(queue_name);
            MessageConsumer consumer = session.createConsumer(topicDestination, "JMSMessageID="+message_id); 
            connection.start(); 
            consumer.receive();
            consumer.close(); 
            session.commit(); 
            session.close(); 
            connection.stop();
但我不断得到jms例外:

 javax.jms.InvalidSelectorException: JMSMessageID=message1-server-42764-1483561148119-0:0:1:1:2
        at org.apache.activemq.selector.SelectorParser.parse(SelectorParser.java:47)
        at org.apache.activemq.ActiveMQMessageConsumer.<init>(ActiveMQMessageConsumer.java:186)
        at org.apache.activemq.ActiveMQSession.createConsumer(ActiveMQSession.java:840)
        at activeMQ.DeleteSingleMessage.run(DeleteSingleMessage.java:30)
        at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.activemq.selector.TokenMgrError: Lexical error at line 1, column 51.  Encountered: ":" (58), after : ""
        at org.apache.activemq.selector.SelectorParserTokenManager.getNextToken(SelectorParserTokenManager.java:1057)
        at org.apache.activemq.selector.SelectorParser.jj_scan_token(SelectorParser.java:1133)
        at org.apache.activemq.selector.SelectorParser.jj_3R_18(SelectorParser.java:849)
        at org.apache.activemq.selector.SelectorParser.jj_3R_11(SelectorParser.java:857)
        at org.apache.activemq.selector.SelectorParser.jj_3R_9(SelectorParser.java:883)
        at org.apache.activemq.selector.SelectorParser.jj_3_5(SelectorParser.java:916)
        at org.apache.activemq.selector.SelectorParser.jj_2_5(SelectorParser.java:563)
        at org.apache.activemq.selector.SelectorParser.addExpression(SelectorParser.java:323)
        at org.apache.activemq.selector.SelectorParser.comparisonExpression(SelectorParser.java:172)
        at org.apache.activemq.selector.SelectorParser.equalityExpression(SelectorParser.java:132)
        at org.apache.activemq.selector.SelectorParser.andExpression(SelectorParser.java:96)
        at org.apache.activemq.selector.SelectorParser.orExpression(SelectorParser.java:75)
        at org.apache.activemq.selector.SelectorParser.JmsSelector(SelectorParser.java:67)
        at org.apache.activemq.selector.SelectorParser.parse(SelectorParser.java:44)
        ... 4 more
javax.jms.InvalidSelectorException:JMSMessageID=message1-server-42764-1483561148119-0:0:1:1:2
位于org.apache.activemq.selector.SelectorParser.parse(SelectorParser.java:47)
位于org.apache.activemq.ActiveMQMessageConsumer。(ActiveMQMessageConsumer.java:186)
位于org.apache.activemq.ActiveMQSession.createConsumer(ActiveMQSession.java:840)
在activeMQ.DeleteSingleMessage.run(DeleteSingleMessage.java:30)
运行(Thread.java:745)
原因:org.apache.activemq.selector.TokenMgrError:第1行第51列的词法错误。遇到::(58),在:“
位于org.apache.activemq.selector.SelectorParserTokenManager.getNextToken(SelectorParserTokenManager.java:1057)
位于org.apache.activemq.selector.SelectorParser.jj_scan_令牌(SelectorParser.java:1133)
位于org.apache.activemq.selector.SelectorParser.jj_3R_18(SelectorParser.java:849)
位于org.apache.activemq.selector.SelectorParser.jj_3R_11(SelectorParser.java:857)
位于org.apache.activemq.selector.SelectorParser.jj_3R_9(SelectorParser.java:883)
位于org.apache.activemq.selector.SelectorParser.jj_3_5(SelectorParser.java:916)
位于org.apache.activemq.selector.SelectorParser.jj_2_5(SelectorParser.java:563)
位于org.apache.activemq.selector.SelectorParser.addExpression(SelectorParser.java:323)
位于org.apache.activemq.selector.SelectorParser.comparisonExpression(SelectorParser.java:172)
位于org.apache.activemq.selector.SelectorParser.equalityExpression(SelectorParser.java:132)
位于org.apache.activemq.selector.SelectorParser.andExpression(SelectorParser.java:96)
位于org.apache.activemq.selector.SelectorParser.orExpression(SelectorParser.java:75)
位于org.apache.activemq.selector.SelectorParser.JmsSelector(SelectorParser.java:67)
位于org.apache.activemq.selector.SelectorParser.parse(SelectorParser.java:44)
... 4更多
我试着跟随帖子,但我不确定我错过了什么

 javax.jms.InvalidSelectorException: JMSMessageID=message1-server-42764-1483561148119-0:0:1:1:2
您忘记了
JMSMessageID的
ID:

添加它并用单引号括起选择器值

  String message_id = "'ID:message1-server-42764-1483561148119-0:0:1:1:2'";
  MessageConsumer consumer = session.createConsumer(topicDestination, "JMSMessageID=" + message_id); 

我不完全确定,但我认为您必须将
消息ID
设置为等于
相关ID
或类似的设置才能实现这一点。我记得在使用IBMWebSphere时遇到过类似的问题。但正如我所说,我并不完全确定。谢谢你的评论!我试图获取相关ID,但它返回null异常是否提供了有关出错原因的更多详细信息?@DaveH请查看我的更新问题和详细异常消息。我还发现,我不确定它是否相关,或者是否尝试将消息选择器用单引号括起来<代码>JMSMessageID='“+message_id+”);