我们有一个代理,它从 JMS 队列中获取消息并将它们发送到 FTP 文件夹。我们现在发现,当 FTP 上的目标目录已经包含很多文件时,发送到 FTP 非常慢。(即当我在一个目录中有大约 2000 个文件时,已经需要几秒钟了)
这里是我们代理的代码(从 JMS 获取消息(纯文本)并将它们写入 FTP):
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse" name="myProxy" statistics="disable" trace="disable" transports="jms">
<parameter name="transport.jms.Destination">myQueue</parameter>
<parameter name="transport.jms.ConnectionFactory">myQueueConnectionFactory</parameter>
<parameter name="transport.jms.DestinationType">queue</parameter>
<parameter name="transport.jms.ContentType">
<rules>
<jmsProperty>contentType</jmsProperty>
<default>text/plain</default>
</rules>
</parameter>
<target faultSequence="rollbackSequence">
<inSequence>
<log level="custom">
<property name="STATUS" value="myProxy called"/>
</log>
<property name="ClientApiNonBlocking" scope="axis2" action="remove"/>
<property name="OUT_ONLY" value="true"/>
<property name="transport.vfs.ReplyFileName" expression="fn:concat(get-property('SYSTEM_DATE','yyyyMMddHHmmss_SSS'), '_result.txt')" scope="transport"/>
<send>
<endpoint key="myFTPendpoint"/>
</send>
</inSequence>
</target>
FTPEndpoint 看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<endpoint xmlns="http://ws.apache.org/ns/synapse" name="myFTPendpoint">
<address uri="vfs:ftp://USER:PASSWORD@SERVER.com/path/toSomewhere?vfs.passive=true"/>
</endpoint>
我现在的分析:
- 仅在将 FTP 与 VFS 一起使用时速度较慢。使用本地文件系统时 - 它很快。
- 文件很小 - 所以不是上传时间
- 网络速度很快
- !速度取决于 FTP 目录中已有文件的数量!
可能的解决方案?
- 修复速度问题。禁用目录列表?
- 解决方法:在输出处创建新文件夹(没有一个文件夹被填得太多)
有人也发现了同样的问题吗?以及如何提高大目录的 FTP 速度?谢谢你的帮助