Так что я работаю над небольшой проблемой, и некоторые советы были бы хорошими.Сначала немного предыстории, извините за длину.
Я работаю над системой управления, которая запрашивает сетевые устройства по протоколу TL1 .Для тех, кто не знаком с протоколом, короткий ответ - это «читаемый человеком» язык, который общается через поток ввода-вывода на основе текста.
Я использую Spring и Jsch, чтобы открыть порт для удаленного сетевого элемента (сетевой элемент), войти в систему, выполнить команду, а затем закрыть соединение.Существует два вида доступа к удаленному сетевому элементу: либо напрямую (через шлюз ssh) , если элемент имеет адрес tcp / ip (многие из них только osi), либо через ems (система управления).) некоторого типа с использованием так называемого «северного интерфейса».
В любом случае, процедура одинакова.
- Используйте Jsch, чтобы открыть порт для сетевого элемента или ems.
- Отправить команду входа для NE ex.
"act-user<tid>:<username>:UniqueId::<password>;"
- Отправить команду ex.
"rtrv-alm-all:<tid>:ALL:uniqueid::,,,,;"
Получение и обработка результатов.Например, приведенные выше результаты могут выглядеть примерно так ...
RTRV-ALM-ALL:foo:ALL:uniqueid;
CMPSW205 02-01-11 18:33:05
M uniqueid COMPLD
"01-01-06:MJ,BOARDOUT-ALM,SA,01-10,12-53-58,,:\"OPA_C__LRX:BOARD EXTRACTED\","
;
Значение ;
важно, поскольку оно сигнализирует об окончании ответа.
- Последний выход из системы изакройте порт.
В Spring я достаточно эффективно использовал ThreadPoolTaskExecutor
для этого.
Пока эта проблема не возникла ...
Содна конкретная платформа ems (Hitachi) я столкнулся с контрольно-пропускным пунктом с моим подходом.Это ems обрабатывает до 80 узлов через него.Вы подключаетесь к порту, затем запускаете команду для входа в ems, а затем запускаете команды, указывающие на различные NE.Та же процедура, что и раньше, но вот проблема ...
После того, как вы войдете в ems, следующая команда, независимо от того, что это, займет до 10 минут для завершения ,пока это не произойдет, все остальные команды будут заблокированы.После этого начального ожидания все остальные команды работают быстро.Кажется, нет никакого способа победить это поведение (я подозреваю, что в течение этого периода происходит автоматическое обнаружение NE).
Теперь суть моего вопроса ...
ИтакМой следующий подход к этой платформе будет состоять в том, чтобы подключиться к ems, войти в него, оставить соединение открытым и просто передавать команды различным NE.Это будет означать 10-минутную задержку после первой загрузки приложения (через веб-интерфейс), но после этого будет нормально.
Проблема в том, как лучше всего это сделать.Наличие единого текстового iostream для прохождения этого материала выглядит как большое узкое место, плюс приложение будет использоваться несколькими пользователями, как мне обрабатывать несколько команд и ответов для этого одного iostream?Я могу открыть несколько iostreams (возможно, до 6) на этом ems, но это также усложняет сортировку того, что и куда идет.
Буду признателен за любые советы по направлению.