Пул соединений 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 иметь дело со связью, с которой они назначены.

Спасибо.

1 ответ

Решение

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

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

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

Другие вопросы по тегам