是否有任何API可以从JMS队列中删除邮件而不使用监控管理工具。如何从JMS队列中删除邮件
7
A
回答
1
QueueBrowser对象可能是您需要的。我认为它有一个删除方法(或类似的)
7
没有直接的API删除消息。您可以调用queueReceiver.receive()方法从队列中删除消息。 QueueBrowser不会从队列中删除消息。
+0
我们可以不用Receiver.receive()方法... – avikodak 2012-03-02 08:42:15
2
这里是我能得到工作:
我假设你要删除的消息相匹配的特定条件。
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);
}
}
1
这是什么,其实我已经在WebLogic上成功测试:
destinationJNDI应包含队列的JNDI名称,如“[email protected]_Notifications.NLNotificationReprocessQ”。
CTX应该像一个有效的InitialContext:
Properties env = new Properties();
env.put(javax.naming.Context.PROVIDER_URL, PROVIDER_URL);
env.put(Context.SECURITY_PRINCIPAL, WL_USER);
env.put(Context.SECURITY_CREDENTIALS, WL_PASSWORD);
env.put(Context.INITIAL_CONTEXT_FACTORY, WL_INITIAL_CONTEXT_FACTORY);
InitialContext ctx = new InitialContext(env);
IDLIST应该是要删除的消息ID的CSV列表
这是代码:
javax.jms.Queue queue = (javax.jms.Queue) ctx.lookup(destinationJNDI.toString());
// lookup the queue connection factory
QueueConnectionFactory queueConnFactory = (QueueConnectionFactory) ctx.lookup(WEBLOGIC_JMS_XA_CONNECTION_FACTORY);
// create a queue connection
QueueConnection queueConn = queueConnFactory.createQueueConnection();
queueConn.start();
// create a queue session
Session queueSession = queueConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
for (String id : idlist.split(",")) {
if (id.startsWith("ID:")) {
MessageConsumer consumer = queueSession.createConsumer(queue, " JMSMessageID='" + id + "'");
Message message = consumer.receive(1000);
out.write("message = " + message + " ");
out.write("deleted ID " + id + " ");
}
}
queueSession.close();
queueConn.close();
3
我不得不另外拨打session.commit()
让消费者删除消息。
此外,receivenowait
API不起作用;改为拨打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();
}
相关问题
- 1. 如何从weblogic JMS队列中清除/删除邮件
- 2. 如何从weblogic JMS队列集群环境中清除/删除邮件
- 3. 如何从cPanel删除邮件队列?
- 4. 从发送邮件邮件队列中删除邮件
- 5. 如何从JMS队列中删除消息?
- 6. 如何从spring jms中清除jms队列?
- 7. 如何清除Jboss中的JMS队列
- 8. 如何删除JMS队列文件存储
- 9. 如何从队列中删除消息?
- 10. 使用JMSMessageID从MQ队列中删除JMS消息
- 11. IBM Websphere MQ - MQGET不会从队列中删除邮件
- 12. SWFUpload + jQuery.SWFUpload - 从队列中删除文件
- 13. X11:从队列中删除事件
- 14. 从plupload队列中删除文件?
- 15. ActiveMQ JMS主题 - 删除旧邮件
- 16. 如何删除(删除)Oracle AQ队列?
- 17. 如何绘制JMS队列?
- 18. 如何从GCD调度队列中删除排队的块?
- 19. 如何从主题中删除邮件
- 20. 如何获得plupload从队列中删除文件?
- 21. 在websphere中使用jmx创建和删除jms队列8.5
- 22. JMS队列和JMS主题
- 23. 如何控制或管理JMS队列?例如。改变队列中的消息顺序,删除消息等
- 24. 如何删除joomla 2.5中的入队邮件?
- 25. 从优先队列中删除元素
- 26. 从bearerbox内存中删除队列
- 27. 从队列中删除所有项C++
- 28. ScheduledThreadPoolExecutor任务从队列中删除
- 29. 从空队列中删除元素?
- 30. 从队列中删除偶数
我不认为有在QueueBrowser删除方法尽可能从Java文档读取...队列浏览器是唯一用于读队列 – avikodak 2012-03-02 07:10:53
你是对的 - 但我记得在这个内容中使用QueueBrowser。如果我没有记错的话,我可以列举队列中的消息,重复这些消息,并且消费我感兴趣的消息(并且只是对它不做任何处理) – DaveH 2012-03-02 07:54:44
好吧,我会查看它,但是我有一个小的怀疑我们可以更改邮件的标题,当他们在队列中......这样我可以更改属性“time_to_live” – avikodak 2012-03-02 09:04:52