2014-10-08 20 views
6

Jak mogę sprawdzić, czy kolejka istnieje na serwerze JMS przy użyciu interfejsu Java API? Nie chcę teraz wysyłać ani odbierać żadnych danych do kolejki, wystarczy sprawdzić, czy kolejka istnieje. Kolejka może być pusta.Jak sprawdzić, czy kolejka JMS istnieje przy użyciu języka Java?

Oto moja próbka kodu. Usunąłem obsługę błędów dla uproszczenia.

Connection connection = null; 
    Session session = null; 
    connection = factory.createConnection(); 
    session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 

    //I was hoping this next line would throw an exception if the queue does not exist 
    Queue queue = session.createQueue(queueName); 

Mój serwer JMS to TIBCO EMS. Mam nadzieję na rozwiązanie, które działa w wersjach 5-7.

Rozwiązanie

I przestrzegać zaleceń w przyjętym odpowiedź ale stworzył przeglądarkę zamiast. Poniższa linia zwrócił wyjątek jako pożądane:

QueueBrowser browser = session.createBrowser(queue); 
+0

JMS nie definiuje interfejsu lub modelu administracyjnego; dlatego odpowiedź na to pytanie zależy od dostawcy JMS. Którego używasz? – Calanais

Odpowiedz

3

Spróbuj utworzyć konsumenta lub producenta off sesji przechodzącą w obiekcie kolejki po prostu Utworzono:

session.createConsumer(queue); 

ta powinna rzucić InvalidDestinationException jeśli kolejka (lub temat) nie istnieje.

4

Jest to zależne od dostawcy, ale w większości przypadków nie będzie wiadomo, dopóki nie zostanie utworzony typ sesji, na przykład session.createConsumer. Po prostu tworzenie konsumenta w ten sposób nie będzie zużywać żadnych wiadomości, dopóki nie odbierzesz odbioru. I tu zachowanie może się zmienić od dostawcy do dostawcy i konfiguracji serwera.

Na przykład z ActiveMQ, zakładając, że nie ma uprawnień blokujących użytkownika, z którym się łączysz, kolejka jest tworzona automatycznie podczas tworzenia typu sesji.

W produkcie WebSphere MQ kolejkę musi zdefiniować administrator. Jeśli nie istnieje, menedżer kolejek zwróci wyjątek z kodem przyczyny 2085 (UNKNOWN_OBJECT_NAME).

Poza tym trzeba sprawdzić, czy dany dostawca miał sposób na dostęp do listy kolejek. Korzystając z powyższych przykładów, ActiveMQ można uzyskać listę kolejek przy użyciu JMX, z WebSphere MQ, możesz to zrobić, jeśli masz uprawnienia do wysyłania poleceń PCF do menedżera kolejek.

Powiązane problemy