Czy istnieje interfejs API do usuwania wiadomości z kolejki JMS bez korzystania z narzędzia administratora monitorowania.Jak usunąć komunikat z kolejki JMS
Odpowiedz
Obiekt QueueBrowser może być tym, czego potrzebujesz. Myślę, że ma ona metodę usuwania (lub podobną)
Brak bezpośredniego interfejsu API do usuwania wiadomości. Możesz wywołać metodę queueReceiver.receive(), aby usunąć komunikat z kolejki. QueueBrowser nie usuwa wiadomości z kolejki.
Nie możemy zrobić bez metody Receiver.receive() ... – avikodak
Oto coś mogę dostać się do pracy:
jestem zakładając, że chcesz usunąć wiadomość dopasowanie konkretnego kryteria.
Queue destination = session.createQueue("your_q");
QueueBrowser browser = session.createBrowser(destination);
Enumeration<?> enum1 = browser.getEnumeration();
while(enum1.hasMoreElements())
{
TextMessage msg = (TextMessage)enum1.nextElement();
if(msg.getStringProperty("any_prop").equals("some_prop"))
{
MessageConsumer consumer = session.createConsumer(destination, "id='" + msg.getStringProperty("id") + "'");
consumer.receive(1000);
}
}
To jest coś, co faktycznie testowany z powodzeniem na WebLogic:
destinationJNDI powinno zawierać nazwę JNDI kolejki, jak „[email protected]_Notifications.NLNotificationReprocessQ”.
ctx powinien być ważny InitialContext jak:
Properties env = new Properties();
env.put(javax.naming.Context.PROVIDER_URL, PROVIDER_URL);
env.put(Context.SECURITY_PRINCIPAL, WL_USER);
env.put(Context.SECURITY_CREDENTIALS, WL_PASSWORD);
env.put(Context.INITIAL_CONTEXT_FACTORY, WL_INITIAL_CONTEXT_FACTORY);
InitialContext ctx = new InitialContext(env);
obiektu IDList powinna być lista CSV identyfikatorów wiadomość, którą chcesz usunąć
jest to kod:
javax.jms.Queue queue = (javax.jms.Queue) ctx.lookup(destinationJNDI.toString());
// lookup the queue connection factory
QueueConnectionFactory queueConnFactory = (QueueConnectionFactory) ctx.lookup(WEBLOGIC_JMS_XA_CONNECTION_FACTORY);
// create a queue connection
QueueConnection queueConn = queueConnFactory.createQueueConnection();
queueConn.start();
// create a queue session
Session queueSession = queueConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
for (String id : idlist.split(",")) {
if (id.startsWith("ID:")) {
MessageConsumer consumer = queueSession.createConsumer(queue, " JMSMessageID='" + id + "'");
Message message = consumer.receive(1000);
out.write("message = " + message + " ");
out.write("deleted ID " + id + " ");
}
}
queueSession.close();
queueConn.close();
I musiał dodatkowo zadzwonić pod numer session.commit()
, aby konsument mógł usunąć wiadomości.
Ponadto interfejs API receivenowait
nie działa; zadzwoń pod numer receive(1000)
.
Oto kawałek kodu działa pisałem, że pracował na jboss
:
try {
connection = connectionFactory.createConnection();
session = connection.createSession(true,-1);
Queue queue = (Queue) QueueConnectionFactory.getInitialContext().lookup("/queue/DLQ");
QueueBrowser browser = session.createBrowser(queue);
Enumeration<?> enum1 = browser.getEnumeration();
while(enum1.hasMoreElements()) {
TextMessage msg = (TextMessage)enum1.nextElement();
MessageConsumer consumer = session.createConsumer(queue, "JMSMessageID='" + msg.getJMSMessageID() + "'");
//You can try starting the connection outside while loop as well, I think I started it inside while loop by mistake, but since this code worked I am hence letting you know what worked
connection.start();
Message message = consumer.receive(1000) ;
if (message != null) {
//do something with message
}
}
}
finally {
session.commit();
consumer.close();
browser.close();
session.close();
connection.close();
}
- 1. Niepowtarzalny komunikat kolejki Azure
- 2. Dodawanie kolejki JMS do Jboss 7
- 3. Usunąć plik z kolejki plupload?
- 4. Jak mogę usunąć wiadomości z kolejki?
- 5. Jak ograniczyć liczbę wystąpień MDB słuchania JBoss JMS kolejki
- 6. W jaki sposób selektory JMS skalują się z głębokością kolejki?
- 7. MSMQ nie może usunąć lub usunąć kolejki
- 8. Jak programowo usunąć dziennik kolejki systemu MSMQ?
- 9. Czy mogę wysyłać wiadomości do kolejki JMS spoza serwera aplikacji?
- 10. Jak używać Java JMS z MQseries
- 11. Jak mogę usunąć określone zadania z kolejki Resque bez usuwania całej kolejki?
- 12. Jak usunąć Redis na słuchaczy „komunikat”
- 13. C++ i JMS - jak połączyć te dwa?
- 14. Jak podłączyć JMS z PHP?
- 15. Czy można usunąć element kolejki według wartości?
- 16. Dlaczego pojawia się komunikat o błędzie, że nie można usunąć kolejki, gdy mój UITableView próbuje załadować?
- 17. Kolejka JMS jest pełna
- 18. JMS for Tomcat 6
- 19. Liczba komunikatów w kolejce JMS
- 20. Zużywanie wiadomości w prawidłowej kolejności z kolejki zaawansowanej przez Camel i JMS
- 21. Nie można utworzyć połączenia JMS z autonomicznej aplikacji Java do kolejki JBoss AS 7
- 22. Kolejka JMS otrzymuje wiadomość?
- 23. Jak używać transformacji wiadomości JMS w ActiveMQ z Stomp/JSON
- 24. ActiveMQ nie odbiera wiadomości z kolejki
- 25. Usuwanie dowolnego elementu z kolejki priorytetowej
- 26. Sygnalizacja wycofania z JMS MessageListener
- 27. Jak usunąć domyślny komunikat o błędzie w tabeli google
- 28. Czy pocieszenie jms implementuje specyfikację JMS 2.0?
- 29. Jak odczytywać wiadomości JMS bez ich zużywania - przy użyciu ActiveMQ
- 30. Jak wyeliminować komunikat Switch?
nie sądzę istnieje metoda usuwania w QueueBrowser miarę odczytać z docs Java ... Kolejka Browser jest tylko używany do odczytu kolejki – avikodak
Masz rację - ale pamiętam, używając QueueBrowser w tej treści. Jeśli dobrze pamiętam, to dostałem wyliczenie wiadomości w kolejce, powtórzyłem to i pochłonąłem wiadomość, która mnie interesowała (i po prostu nic nie dodawam). – DaveH
Ok, przejrzę to ... ale ja mam mała wątpliwość czy możemy zmienić nagłówki wiadomości, gdy są one w kolejce ... tak, że mogę zmienić właściwość "time_to_live" – avikodak