簡體   English   中英

如何使用Java驗證JMS隊列是否存在?

[英]How do I verify that a JMS queue exists using Java?

如何使用Java API檢查JMS服務器上是否存在隊列? 我現在不想向隊列發送或接收任何數據,只需驗證隊列是否存在。 此外,隊列可能是空的。

這是我的代碼示例。 為簡單起見,我刪除了錯誤處理。

    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);

我的JMS服務器是TIBCO EMS。 我希望有一個適用於5-7版本的解決方案。

我按照接受的答案中的建議,但創建了一個瀏覽器。 以下行根據需要引發了異常:

QueueBrowser browser = session.createBrowser(queue);

這取決於提供程序,但在大多數情況下您不會知道,直到您創建會話類型,例如session.createConsumer。 以這種方式創建消費者只會在您收到消息之前不會消費任何消息。 在這里,行為可能會從提供商變為提供商和服務器的配置。

例如,對於ActiveMQ,假設沒有權限阻止您正在連接的用戶,則在創建會話類型時會自動創建隊列。

使用WebSphere MQ,隊列必須由管理員定義。 如果它不存在,隊列管理器將返回原因代碼為2085的異常(UNKNOWN_OBJECT_NAME)。

除此之外,您還需要查看特定提供商是否有辦法訪問隊列列表。 使用上面的示例,ActiveMQ可以使用JMX獲取隊列列表,使用WebSphere MQ,如果您有權將PCF命令發送到隊列管理器,則可以執行此操作。

嘗試在會話中創建一個消費者或生產者,傳遞您剛剛創建的隊列對象:

session.createConsumer(queue);

如果隊列(或主題)不存在,則應拋出InvalidDestinationException。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM