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