Соединитель транспорта ActiveMQ Java NIO против PoolConnectionFactory

#multithreading #jms #activemq #connection-pooling #nio

Вопрос:

Каковы различные варианты использования транспортного соединителя Java NIO против PoolConnectionFactory в ActiveMQ. Оба служат пулу подключений.Я хочу использовать тысячи клиентов, подключающихся к брокеру, и поддерживать отдельную очередь для каждого клиента. Где в сценарии есть вариант использования для обоих вариантов?

Ответ №1:

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

PooledConnectionFactory-это клиентское устройство, которое предоставляет пул из одного или нескольких открытых подключений, которые могут использоваться кодом приложения для уменьшения количества событий создания / уничтожения соединений, что в некоторых случаях приводит к более быстрому коду на стороне клиента и снижению накладных расходов удаленного брокера, поскольку ему не нужно обрабатывать события создания / уничтожения соединений из приложения, модель которого вызывает такое поведение. В зависимости от того, как вы закодировали свое приложение или какие у вас слои API, такие как Camel или Spring и т.д., Пул может принести пользу, а может и не принести.

Эти две вещи не связаны и не должны приравниваться друг к другу.

Ответ №2:

Транспорт NIO использует на низком уровне селектор, который намного эффективнее, чем функция подключения к пулу. Это означает, что он получает уведомление, если какие-либо новые данные готовы, пока пул ожидает каждого соединения. Для вашего варианта использования я бы настоятельно рекомендовал разъем NIO

Комментарии:

1. Может ли кто-нибудь объяснить более ясно. Это poolConnectionFactory, ожидающий подключения?

2. Транспорт NIO и объект PooledConnectionFactory не являются взаимоисключающими. На самом деле они ортогональны. Говорить, что один из них более эффективен, чем другой, на самом деле не имеет смысла.