Пул соединений 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. Не ясно, каковы будут масштабы этого, но если это будет быстро закрыто, это может стать узким местом.