Долгоживущие сеансы JMS. Хранение соединений JMS / сеансов JMS всегда открывало плохую практику? - PullRequest
8 голосов
/ 08 ноября 2008

Всегда ли сохранение 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?

Ответы [ 5 ]

6 голосов
/ 10 ноября 2008

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

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

5 голосов
/ 30 мая 2012

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

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

5 голосов
/ 08 ноября 2008

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

4 голосов
/ 11 ноября 2008

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

1 голос
/ 24 октября 2016

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

try { 
        this.connection.close();
    } catch (JMSException e) {
        //
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...