gpt4 book ai didi

java - Spring Integration 和流程需要时间和暂停的问题

转载 作者:太空宇宙 更新时间:2023-11-04 14:20:30 24 4
gpt4 key购买 nike

我正在查看我们的应用程序中存在的一些问题。 Spring 集成用于轮询特定目录,然后处理该目录中的文件。它可以处理 5k 1kb 文件,有时会出现巨大的暂停,应用程序什么也不做,只是闲置,然后在 4 分钟内完成该过程。然后下一次运行将花费更长的时间,之后的运行将花费更长的时间,依此类推,直到我重新启动应用程序,它又回到 4 分钟标记。有没有人遇到过这个问题。

我编写了一个没有 Spring Integration 的独立版本,但没有遇到同样的问题。我还在下面粘贴了 xml 配置,以防万一我做了一些我无法发现的错误。

提前致谢。

 <!-- Poll the input file directory for new files.  If found, send a Java File object on inputFileChannel -->
<file:inbound-channel-adapter directory="file:${filepath}"
channel="inputFileChannel" filename-regex=".+-OK.xml">
<si:poller fixed-rate="5000" max-messages-per-poll="1" />
</file:inbound-channel-adapter>

<si:channel id="inputFileChannel" />

<!-- Call processFile() and start parsing the XML inside the File -->
<si:service-activator input-channel="inputFileChannel"
method="splitFile" ref="splitFileService">
</si:service-activator>

<!-- Poll the input file directory for new files. If found, send a Java File object on inputFileChannel -->
<file:inbound-channel-adapter directory="file:${direcotrypath}" channel="inputFileRecordChannel" filename-regex=".+-OK.xml">

<si:poller fixed-rate="5000" max-messages-per-poll="250" task-executor="executor" />
</file:inbound-channel-adapter>

<task:executor id="executor" pool-size="8"
queue-capacity="0"
rejection-policy="DISCARD"/>

<si:channel id="inputFileRecordChannel" />

<!-- Call processFile() and start parsing the XML inside the File -->
<si:service-activator input-channel="inputFileRecordChannel"
method="processFile" ref="processedFileService">
</si:service-activator>

<si:channel id="wsRequestsChannel"/>

<!-- Sends messages from wsRequestsChannel to the httpSender, and returns the responses on
wsResponsesChannel. This is used once for each record found in the input file. -->
<int-ws:outbound-gateway uri="#{'http://localhost:'+interfaceService.getWebServiceInternalInterface().getIpPort()+'/ws'}"
message-sender="httpSender"
request-channel="wsRequestsChannel" reply-channel="wsResponsesChannel" mapped-request-headers="soap-header"/>

<!-- Handles the responses from the web service (wsResponsesChannel). Again
this is used once for each response from the web service -->
<si:service-activator input-channel="wsResponsesChannel"
method="handleResponse" ref="responseProcessedFileService">
</si:service-activator>

最佳答案

正如我在对您的问题的评论中猜测的那样,(默认)AcceptOnceFileListFilter 对于大量文件来说不能很好地扩展,因为它对先前处理的文件执行线性搜索。

我们可以在那里做一些改进;我开了一个JIRA Issue for that .

但是,如果您不需要该过滤器的语义(即您的流程在完成时删除输入文件),则可以将其替换为另一个过滤器,例如 AcceptAllFileListFilter

如果您需要接受一次语义,您将需要对如此大量的文件进行更有效的实现。但我要警告的是,当使用如此大量的文件时,如果处理后不删除它们,无论使用什么过滤器,速度都会变慢。

关于java - Spring Integration 和流程需要时间和暂停的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27247365/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com