Я пытаюсь проверить, есть ли сообщения в очереди. Для доступа к очереди я использую Factory Connection, Resource Destination и JNDI lookup (метод ниже). Проблема возникает, когда Factory Connection указывает на несколько узлов из кластера Glassfish 3. У свойства AddressList есть список с IP-адресами узлов.Проверьте, есть ли сообщения JMS на узлах кластера Glassfish 3
Один из способов его решения - проверить каждый узел. Есть ли способ прочитать значение свойства AddressList из фабрики соединений JMS, определенной в ресурсах Glassfish?
Есть ли другие способы проверить, есть ли сообщения в очереди на всех узлах кластера 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