我試圖檢查隊列中是否有消息。要訪問隊列,我使用連接工廠,目標資源和JNDI查找(下面的方法)。當連接工廠指向Glassfish 3羣集的多個節點時,問題就出現了。 AddressList屬性具有節點的IP地址列表。檢查Glassfish 3羣集節點上是否存在JMS消息
解決它的一種方法是檢查每個節點。有沒有辦法從Glassfish資源中定義的JMS連接工廠讀取AddressList屬性的值?
有沒有其他方法可以檢查Glassfish 3羣集的所有節點上的隊列上是否有消息?
不想在配置文件和JMS連接工廠中保存集羣節點的地址(連接工廠已在應用程序的其他部分中使用過)。
謝謝。
private boolean existsMessagesOnTheQueue(String connectionFactoryName, Queue queue, String selector) throws Exception {
QueueConnectionFactory connectionFactory;
QueueConnection connection;
Session session ;
QueueBrowser browser ;
try {
connectionFactory = (QueueConnectionFactory) InitialContext.doLookup(connectionFactoryName);
connection = connectionFactory.createQueueConnection();
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
browser = session.createBrowser(queue, selector);
connection.start();
if (browser.getEnumeration().hasMoreElements()) {
log.debug("Found message on " + queue.getQueueName());
return true;
}
} finally {
closeBrowser(browser);
closeSession(session);
closeConnection(connection);
}
return false;
}
不幸的是,羣集中的隊列有不同的消息。在一種情況下,隊列是空的,而其他隊列中有消息。 –
這意味着集羣不是真的有效,這是一個完全不同的問題。我在我的答案中說的是,解決方案並不是瀏覽羣集中的所有隊列副本。我建議在羣集配置中爲您的羣集不起作用創建一個新問題。 – brainOverflow