如何从JMS队列中删除邮件?

时间:2017-07-28 18:55:52

标签: jms activemq jmstemplate

我有几个工作,每个工作都有多个排队的邮件。 每个作业的消息是随机交错的。 如果用户决定取消作业,我想从队列中删除该作业的所有消息。 我已经能够使用browse()查找要删除的所有邮件,但我们无法弄清楚如何删除它们。 我尝试使用receiveSelected()摆脱它们,但它只是挂起。 (我正在使用JmsTemplate

3 个答案:

答案 0 :(得分:0)

JMS不定义管理类型功能,例如从队列中删除消息。

编程方式是使用消息。或者,有一些消息管理工具可以让您无需编程即可完成此操作。

答案 1 :(得分:0)

没有任何JMS API可以删除邮件。但是,您似乎可以根据MBean purge的要求调用removeMessage org.apache.activemq:type=Broker,brokerName=amq,destinationType=Queue,destinationName=testQ或其他操作来删除邮件。

答案 2 :(得分:0)

你走在正确的轨道上。使用选择器消费这些消息是可行的方法 - 例如使用JmsTemplate receiveSelected。

如果"挂起",则可能意味着队列中没有匹配的消息。你能在一些属性上识别你的消息,比如JMSType或其他StringProperty吗?确保您可以提供JMS选择器。

即。如果你的工作是由用户X发起的,那么设置一些属性,例如" initiatingUser"到" x"。然后要使用所有消息,请使用选择器initiatingUser='X'