2008-11-07 3 views
7

Поддерживает ли JMS-соединения/сеансы/потребитель всегда открывать плохую практику?Длинные сессии JMS. Удерживает ли JMS-подключения/JMS-сессии всегда открытую плохую практику?

Код проекта Пример:

// app startup code 

ConnectionFactory cf = (ConnectionFactory)jndiContext.lookup(CF_JNDI_NAME); 
Connection connection = cf.createConnection(user,pass); 
Session session = connection.createSession(true,Session.TRANSACTIONAL); 
MessageConsumer consumer = session.createConsumer(new Queue(queueName)); 
consumer.setMessageListener(new MyListener()); 
connection.start(); 
connection.setExceptionListener(new MyExceptionHandler()); // handle connection error 


// ... Message are processed on MyListener asynchronously ... 


// app shutdown code 

consumer.close(); 
session.close(); 
connection.close(); 

Любые предложения, чтобы улучшить эту картину использования JMS?

ответ

4

Это очень распространенная и приемлемая практика при работе с долгоживущими соединениями. Для многих серверов JMS на самом деле предпочтительнее создавать новое соединение каждый раз, когда это необходимо.

6

Согласен. Вот некоторые good tips on how to use JMS efficiently, который включает в себя поддержание связей/сессий/производителей/потребителей.

Возможно, вы также захотите проверить recommendation on using transactions, если вы заинтересованы в максимальной производительности.

4

В нашем приложении у нас будут подключения/сеансы/потребители/продюсеры в течение нескольких месяцев. Нам пришлось работать с нашим поставщиком (BEA), чтобы сделать эту работу надежно. Но любые проблемы с этим - ошибка, которую должен решить поставщик.

+0

+1 для обмена опытом с фактическим развертыванием. – 2014-02-11 11:53:00

5

Выбор сохранения соединения/сеанса/продюсера/потребителя, открытого долгое время или нет, должен основываться на частоте, с которой производитель/потребитель отправляет/принимает сообщения.

Если производитель отправляет или потребитель получает сообщения часто, соединения/сеансы/продюсер/потребитель должны оставаться открытыми. С другой стороны, если сообщения посылают/получают нечасто, то это не хорошо, если эти объекты JMS открыты, будут потреблять системные ресурсы, такие как сокеты.

0

FYI, нет необходимости закрывать сессии, производителей и потребителей закрытого подключения (javax.jms.Connection). Код должен быть достаточным для освобождения ресурсов:

try { 
     this.connection.close(); 
    } catch (JMSException e) { 
     // 
    } 
Смежные вопросы