是否有一种技术可以"streaming" IIB 消息流中的 HTTP 回复节点?



我是一个新手,我有一个IIB消息流,看起来像这样:

HTTP输入节点->文件读取节点->HTTP回复节点。

(1( HTTP输入节点流由用户发起https请求来启动。(2( 文件读取节点-消息流从我们的ftp服务器获取一个文件(本地文件目录、文件名、sftp主机和凭据以及sftp服务器目录都是临时硬编码的,只是为了便于解决方案的故障,但在现实生活中,这些信息会从http请求中提取(。(3( HTTP回复节点-用从ftp服务器检索到的文件内容回复用户。

问题是:当File Read Node读取大文件时,消息流会导致"java/lang/OutOfMemoryError"堆转储(我已经通过使用124 MG文件运行消息流的多个实例进行了测试(。

背景:这是一个在IIB中重写的遗留ASP/VBScript应用程序。不是我干的。但我的任务是修复内存错误。

更多信息:通过阅读,我明白了为什么投入的内存会全部用完。我已经阅读了关于大型消息处理的所有内容,但由于该应用程序的主要目的是允许用户通过**https**从我们的ftp服务器上获取文件,我似乎与该HTTP回复节点绑定在一起,因此当流到达HTTP回复节点的"in"终端时,整个文件必须在MBMessageAssembly对象中可用(因此在内存中可用(。

我的问题是:有没有一种技术可以"流式传输"到HTTP回复节点?或者,是否可以完全删除HTTP回复节点,并在Java计算节点中执行SFTPHTTP回复(我不能使用计算节点/ESQL,因为我们没有获得许可(?或者,还有其他想法吗?

很好的问题陈述,感谢您在发布问题之前做的跑腿工作。这里的根本问题是IIB是为处理消息而设计的,而不是(巨大的(文件。您可以尝试增加所有的堆大小

  • HTTP侦听器(代理范围或特定于EG,请确保调整正确的侦听器(
  • 执行组
  • JVM

请注意,IIB不会将消息树本身存储在JVM堆中,即使您使用JavaCompute节点来操作它。但是FileRead节点使用JVM,它显然需要更多的Java堆。

最新更新