2014-10-08 20 views
6

Làm cách nào để kiểm tra xem hàng đợi có tồn tại trên máy chủ JMS sử dụng API Java không? Tôi không muốn gửi hoặc nhận bất kỳ dữ liệu nào đến hàng đợi ngay bây giờ, chỉ cần xác minh rằng hàng đợi tồn tại. Ngoài ra, hàng đợi có thể trống.Làm cách nào để xác minh rằng hàng đợi JMS tồn tại bằng Java?

Đây là mẫu mã của tôi. Tôi đã xóa xử lý lỗi để đơn giản.

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áy chủ JMS của tôi là TIBCO EMS. Tôi hy vọng cho một giải pháp hoạt động trên các phiên bản 5-7.

Giải pháp

Tôi làm theo các khuyến nghị trong câu trả lời chấp nhận nhưng tạo ra một trình duyệt để thay thế. Dòng sau ném một ngoại lệ như mong muốn:

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

JMS không xác định giao diện hoặc mô hình quản trị; do đó câu trả lời cho điều này phụ thuộc vào nhà cung cấp JMS của bạn. Cái nào bạn đang dùng? – Calanais

Trả lời

3

Hãy thử tạo một người tiêu dùng hoặc sản xuất ra khỏi phiên đi qua trong đối tượng hàng đợi bạn vừa tạo:

session.createConsumer(queue); 

này nên ném một InvalidDestinationException nếu hàng đợi (hoặc chủ đề) không tồn tại.

4

này phụ thuộc vào nhà cung cấp, nhưng bạn sẽ không biết trong hầu hết các trường hợp đến khi bạn tạo kiểu phiên, chẳng hạn như session.createConsumer. Đơn giản chỉ cần tạo ra một người tiêu dùng theo cách này sẽ không tiêu thụ bất kỳ tin nhắn cho đến khi bạn nhận được một. Và đây là hành vi có thể thay đổi từ nhà cung cấp sang nhà cung cấp và cấu hình máy chủ.

Ví dụ với ActiveMQ, giả sử không có quyền ngăn chặn người dùng mà bạn đang kết nối với, hàng đợi được tạo ra tự động khi bạn tạo kiểu phiên.

Với WebSphere MQ, hàng đợi phải được xác định bởi một admin. Nếu nó không tồn tại, trình quản lý hàng đợi sẽ trả lại một ngoại lệ với mã lý do là 2085 (UNKNOWN_OBJECT_NAME).

Bên ngoài điều này, bạn sẽ cần phải xem nếu nhà cung cấp nói riêng đã có một cách để truy cập vào một danh sách các hàng đợi. Sử dụng các ví dụ trên, ActiveMQ bạn có thể lấy danh sách các hàng đợi bằng cách sử dụng JMX, với WebSphere MQ, bạn có thể làm điều này nếu bạn có quyền gửi các lệnh PCF đến trình quản lý hàng đợi.

Các vấn đề liên quan