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

问题描述 投票:0回答:3

我有几个作业,每个作业都有多条消息排队。 每个作业的消息都是随机交错的。 如果用户决定取消作业,我想从队列中删除属于该作业的所有消息。 我已经能够使用

browse()
找到所有要删除的消息,但无法弄清楚如何删除它们。 我尝试使用
receiveSelected()
来摆脱它们,但它只是挂起。 (我正在使用
JmsTemplate

jms activemq-classic jmstemplate
3个回答
0
投票

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

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


0
投票

没有任何 JMS API 可以删除消息。不过,似乎您可以根据 MBean

purge
的要求调用
removeMessage
org.apache.activemq:type=Broker,brokerName=amq,destinationType=Queue,destinationName=testQ
或其他操作来删除消息。


0
投票

您走在正确的道路上。使用选择器使用这些消息是正确的方法 - 例如使用 JmsTemplate receiveSelected。

如果它“挂起”,则可能意味着队列中没有匹配的消息。您能否在某些属性(例如 JMSType 或其他 StringProperty)上识别您的消息?确保您可以并提供 JMS 选择器。

即如果您的作业是由用户 X 启动的,则将某些属性(例如“initiatingUser”)设置为“x”。然后要使用所有消息,请使用选择器

initiatingUser='X'

© www.soinside.com 2019 - 2024. All rights reserved.