0

我已经构建了一个带有循环的编排,以从 REST Web 服务中检索分页数据。根据页面大小和偏移量,我可以为“下一页”数据调用服务。然后我将其分批,将其映射到内部格式并进一步处理。处理一个页面后,我从 REST Web 服务请求下一页。

事实证明,运行编排和发送端口的主机会导致内存在处理所有数据期间不断增长,并最终达到节流模式。

为什么当我完成一页循环时没有释放内存?是存储在构建内存的编排中的“消费”消息吗?是否可以从这些“消费”消息中清除编排,以释放使用的内存?(编排或发送端口上没有活动的消息跟踪。)

4

2 回答 2

1

显然,没有办法禁止 BizTalk Orchestrations 在 Orchestration 中建立消息列表,包括已使用/已处理/已使用的消息。把东西放在 Scope 中并不禁止这种行为。

因此,对于长时间运行的编排,可能会积累大量消息。特别是对于单例编排,解决此问题的一般解决方案是确保编排偶尔关闭一次(例如,在空闲时)。

我的解决方案是将 Orchestration 拆分为两个,并让初始 Orchestration 使用Start Orchestration启动第二个 Orchestration ,然后递归调用第二个 Orchestration,依此类推,直到收到最后一页并且最后一个 Orchestration 结束。

于 2021-09-21T06:58:41.640 回答
0

是的,您需要做的是拥有范围,并且消息在范围中初始化(下面的绿色突出显示)而不是顶级(黄色),这意味着它们也将在结束时被处理掉范围。注意:这意味着这些消息不能在范围之外使用。

在此处输入图像描述

但是,如果您只是在循环中重复使用相同的消息,那么我不希望它会增加内存使用量。所以可能还有其他事情发生。我怀疑您必须将每个页面添加到消息中,这就是正在增长的

于 2021-09-16T01:33:44.153 回答