2017-07-28 339 views
0

我有几个作业,每个作业都有多个排队的消息。 每个作业的消息是随机交错的。 如果用户决定取消作业,我想从队列中删除属于该作业一部分的所有消息。 我已经能够使用browse()找到所有要删除的邮件,但一直未能弄清楚如何删除它们。 我试图通过使用receiveSelected()摆脱他们,但它只是挂起。 (我正在使用JmsTemplate如何从JMS队列中删除消息?

回答

0

JMS没有定义管理类型函数,例如从队列中删除消息。

编程方式是使用消息。另外,还有一些消息管理工具可以让你在没有编程的情况下执行此操作。

0

没有任何JMS API可以删除消息。但似乎您可以调用purgeremoveMessage或根据您对MBean org.apache.activemq:type=Broker,brokerName=amq,destinationType=Queue,destinationName=testQ的要求删除消息。

0

您正处于正确的轨道上。使用选择器消费这些消息是一种方式 - 例如使用JmsTemplate receiveSelected。

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

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

+0

我不明白为什么浏览找到消息,但选择挂起。我在这两种情况下使用相同的messageSelector字符串和相同的destinationName。 – Solx

+0

我在用'jmsTemplate.browseSelected'浏览并用'jmsTemplate.receiveSelected(' – Solx

相关问题