是否有API可以在不使用监视管理工具的情况下从JMS队列中删除消息。
发布于 2012-03-02 15:11:25
没有删除消息的直接接口。可以调用queueReceiver.receive()方法从队列中删除消息。QueueBrowser不会从队列中删除消息。
发布于 2015-04-14 12:16:46
我不得不另外调用session.commit()让消费者删除消息。
此外,receivenowait应用程序接口不起作用;请调用receive(1000)。
下面是我写的一段在jboss上工作的代码
try {
connection = connectionFactory.createConnection();
session = connection.createSession(true,-1);
Queue queue = (Queue) QueueConnectionFactory.getInitialContext().lookup("/queue/DLQ");
QueueBrowser browser = session.createBrowser(queue);
Enumeration<?> enum1 = browser.getEnumeration();
while(enum1.hasMoreElements()) {
TextMessage msg = (TextMessage)enum1.nextElement();
MessageConsumer consumer = session.createConsumer(queue, "JMSMessageID='" + msg.getJMSMessageID() + "'");
//You can try starting the connection outside while loop as well, I think I started it inside while loop by mistake, but since this code worked I am hence letting you know what worked
connection.start();
Message message = consumer.receive(1000) ;
if ( message != null ) {
//do something with message
}
}
}
finally {
session.commit();
consumer.close();
browser.close();
session.close();
connection.close();
}发布于 2013-06-15 02:48:51
下面是我可以做的一些事情:
我假设您想要删除符合特定条件的邮件。
Queue destination = session.createQueue("your_q");
QueueBrowser browser = session.createBrowser(destination);
Enumeration<?> enum1 = browser.getEnumeration();
while(enum1.hasMoreElements())
{
TextMessage msg = (TextMessage)enum1.nextElement();
if(msg.getStringProperty("any_prop").equals("some_prop"))
{
MessageConsumer consumer = session.createConsumer(destination, "id='" + msg.getStringProperty("id") + "'");
consumer.receive(1000);
}
}https://stackoverflow.com/questions/9529214
复制相似问题