如何从JMS队列中删除消息?

3

我有几个工作,每个工作都有多个消息在队列中等待处理。 每个工作的消息是随机交错的。 如果用户决定取消一个工作,我想从队列中删除该工作的所有消息。 我已经能够使用browse()找到要删除的所有消息,但是没有找到如何删除它们的方法。 我尝试使用receiveSelected()将其删除,但它仅会挂起。 (我正在使用JmsTemplate

3个回答

0

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

编程方式是消耗消息。另外,还有消息管理工具可以在不编程的情况下实现此操作。


0

没有任何JMS API可以删除消息。但是,似乎您可以根据需要在MBean org.apache.activemq:type=Broker,brokerName=amq,destinationType=Queue,destinationName=testQ 上调用purgeremoveMessage或其他操作来删除消息。


0
您走在正确的道路上。使用选择器消费那些消息是正确的方法-例如使用JmsTemplate receiveSelected。
如果它“挂起”,那很可能意味着您在队列上没有匹配的消息。您可以通过某些属性(例如JMSType或其他StringProperty)识别自己的消息吗?确保您可以并提供JMS选择器。
即,如果您的作业由用户X启动,则设置某些属性,例如“initiatingUser”为“x”。然后要消耗所有消息,请使用选择器 initiatingUser ='X'

我不理解为什么浏览器能够找到消息,但选择操作却卡住了。在这两种情况下,我都使用了相同的messageSelector字符串和destinationName。 - Solx
我正在使用 jmsTemplate.browseSelected 进行浏览,并使用 jmsTemplate.receiveSelected( 进行选择。 - Solx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接