![](/img/trans.png)
[英]How can I access a JMS queue from a Java class using Apache Camel?
[英]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.