Пул соединений JMS в прослушивателе сообщений

В настоящее время я работаю над автономными приложениями Java, которые подключаются к Websphere MQ для отправки и получения сообщений.

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

if(connection == null)
        connection = getJmsConnection();

    try {
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        if (isTopic) {
            destination = session.createTopic(destinationName);
        } else {
            destination = session.createQueue(destinationName);
        }
        consumer = session.createConsumer(destination);
        consumer.setMessageListener(listener);
    } catch (JMSException e) {
        e.printStackTrace();
    }

Метод getJmsConnection() вернет соединение из пула, реализованного с использованием библиотеки Apache Commons Pool.

Мой вопрос: будет ли соединение, назначенное слушателю из пула, активным и привязанным к этому слушателю, пока программа работает? Или соединение используется периодически и может быть повторно использовано другими процессами? Наша идея состоит в том, чтобы процесс отправки и получения повторно использовал соединение из пула, но я не уверен, как MessageListener справляется с назначенным им соединением.

Спасибо.


person ipohfly    schedule 26.11.2014    source источник


Ответы (1)


Ключевым объектом здесь является сеанс, а не соединение; сеанс находится на том, который будет выполнять здесь основную работу с потреблением сообщений (асинхронно или иначе).

Желательно попытаться распространить соединение как можно шире. Временные места назначения ограничены на уровне соединения. Так что использование объединения — хорошая идея; будет вполне возможно поделиться этой связью.

Однако я бы также сказал, что, возможно, стоит подумать об объединении сеансов. С кодом здесь будет создаваться новый сеанс, каждый раз через этот код, что будет означать создание нового подключения к администратору очередей WebSphere MQ. Неясно, каковы будут масштабы этого, но если это быстро закрыть, это может стать узким местом.

person Calanais    schedule 26.11.2014
comment
Спасибо за ответ. Я не совсем уверен, как осуществляется объединение сеансов, постараюсь узнать об этом больше. - person ipohfly; 26.11.2014
comment
Пул сеансов будет выполняться очень похоже на пул соединений. Ключевым моментом будет гарантировать, что только 1 поток будет использовать сеанс в любой момент времени. - person Calanais; 26.11.2014
comment
Это значит, что у нас будет 2 бассейна? Один для соединений и один для сессий. - person ipohfly; 26.11.2014