2017-07-28 5 views
0

Ich habe mehrere Jobs, die jeweils mehrere Nachrichten in der Warteschlange haben. Die Nachrichten für jeden Job sind zufällig verschachtelt. Wenn ein Benutzer entscheidet, einen Job abzubrechen, möchte ich alle Nachrichten, die Teil dieses Jobs sind, aus der Warteschlange entfernen. Ich konnte browse() verwenden, um alle zu entfernenden Nachrichten zu finden, aber ich konnte nicht herausfinden, wie sie entfernt werden können. Ich versuchte, sie loszuwerden, indem Sie receiveSelected() verwenden, aber es hängt einfach. (Ich verwende JmsTemplate)Wie kann ich Nachrichten aus einer JMS-Warteschlange löschen?

Antwort

0

JMS definiert keine Verwaltungsfunktionen wie das Löschen einer Nachricht aus der Warteschlange.

Der programmatische Weg besteht darin, die Nachricht zu konsumieren. Alternativ gibt es Messaging-Management-Tools, mit denen Sie dies ohne Programmierung tun können.

0

Es gibt keine JMS-API zum Entfernen von Nachrichten. Jedoch scheinen Sie purgeremoveMessage oder andere Operation gemäß Ihrer Anforderung auf MBean org.apache.activemq:type=Broker,brokerName=amq,destinationType=Queue,destinationName=testQ zum Löschen von Nachrichten aufrufen.

0

Sie sind auf dem richtigen Weg. Diese Nachrichten mit einem Selektor zu konsumieren ist der Weg zu gehen - wie mit JmsTemplate receiveSelected.

Wenn es "hängt", bedeutet dies wahrscheinlich, dass Sie keine übereinstimmenden Nachrichten in der Warteschlange haben. Können Sie Ihre Nachrichten auf einer Eigenschaft wie JMSType oder einer anderen StringProperty identifizieren? Stellen Sie sicher, dass Sie einen JMS-Selektor bereitstellen können.

I.e. Wenn Ihre Jobs von Benutzer X initiiert werden, legen Sie eine Eigenschaft wie "initiatingUser" auf "x" fest. Verwenden Sie dann den Selektor initiatingUser='X', um alle Nachrichten zu konsumieren.

+0

Ich verstehe nicht, warum Durchsuchen die Nachricht findet, aber wählen Sie hängt. Ich verwende in beiden Fällen die selbe messageSelector-Zeichenfolge und denselben destinationName. – Solx

+0

Ich suche mit 'jmsTemplate.browseSelected' und wähle mit' jmsTemplate.receiveSelected (' – Solx

Verwandte Themen