【问题标题】:Is there a technique for "streaming" to an HTTP Reply Node in an IIB message flow?在 IIB 消息流中是否有“流式传输”到 HTTP 回复节点的技术?
【发布时间】:2019-11-01 20:02:11
【问题描述】:

我是新手,我的 IIB 消息流如下所示:

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

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

问题是这样的:当文件读取节点读取大文件时,消息流会导致“java/lang/OutOfMemoryError”堆转储(我一直在使用 124 MG 文件运行多个消息流实例进行测试) .

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

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

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

【问题讨论】:

    标签: ibm-integration-bus


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      • 2012-07-30
      • 2017-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多