2017-07-28 335 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

相關問題