【发布时间】:2010-07-23 20:04:59
【问题描述】:
所以我正在解决一个问题,一些建议会很好。先说一点背景,请见谅。
我正在开发一个通过TL1 protocol 查询网络设备的管理系统。对于那些不熟悉该协议的人来说,简短的回答是这是一种“人类可读”的语言,它通过基于文本的 IO 流进行通信。
我正在使用Spring和Jsch打开一个到远程NE(网元)的端口,登录,运行命令,然后关闭连接。有两种方法可以进入远程 NE,或者直接(通过 ssh 网关)如果元素具有 tcp/ip 地址(许多只是 osi),或者通过 ems(管理系统)使用所谓的“北向接口”。
无论哪种方式,程序都是相同的。
- 使用 Jsch 打开一个到 NE 或 ems 的端口。
- 发送NE ex的登录命令。
"act-user<tid>:<username>:UniqueId::<password>;" - 发送命令前。
"rtrv-alm-all:<tid>:ALL:uniqueid::,,,,;" -
检索和处理结果。例如上面的结果可能看起来像这样......
RTRV-ALM-ALL:foo:ALL:uniqueid;CMPSW205 02-01-11 18:33:05M uniqueid COMPLD"01-01-06:MJ,BOARDOUT-ALM,SA,01-10,12-53-58,,:\"OPA_C__LRX:BOARD EXTRACTED\",";
; 很重要,因为它表示响应结束。
- 最后注销并关闭端口。
在 Spring 中,我一直在非常有效地使用 ThreadPoolTaskExecutor 来做到这一点。
直到出现这个问题...
对于一个特定的 ems 平台(日立),我的方法遇到了障碍。这个 ems 通过它处理多达 80 个节点。您连接到端口,然后发出命令登录到 ems,然后运行指向各个 NE 的命令。和之前的过程一样,但是问题出在这……
登录 ems 后,下一个命令,无论是什么,最多需要 10 分钟才能完成。在此之前,所有其他命令都被阻止。在此初始等待之后,所有其他命令都会快速运行。似乎没有办法阻止这种行为(我怀疑在此期间发生了一些 NE 自动发现)。
现在我的问题的重点......
所以我对这个平台的下一个方法是连接到 ems,登录到它,并保持连接打开,然后将命令传递给各种 NE。这意味着应用程序(基于 Web)首次加载后会有 10 分钟的延迟,但在此之后就可以了。
我遇到的问题是如何最好地做到这一点。有一个基于文本的 iostream 来传递这些东西看起来像是一个很大的瓶颈,加上多个用户将使用该应用程序,我如何处理针对这个单个 iostream 的多个命令和响应?我可以在这个 ems 上打开一些 iostreams(可能最多 6 个),但这也使得整理去哪里变得复杂。
任何有关方向的建议都将不胜感激。
【问题讨论】: