1

我们有一个代理,它从 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>

我现在的分析:

  1. 仅在将 FTP 与 VFS 一起使用时速度较慢。使用本地文件系统时 - 它很快。
  2. 文件很小 - 所以不是上传时间
  3. 网络速度很快
  4. !速度取决于 FTP 目录中已有文件的数量!

可能的解决方案?

  • 修复速度问题。禁用目录列表?
  • 解决方法:在输出处创建新文件夹(没有一个文件夹被填得太多)

有人也发现了同样的问题吗?以及如何提高大目录的 FTP 速度?谢谢你的帮助

4

3 回答 3

1

通常,如果您有性能问题,您应该进行基准测试。

尝试从命令行 FTP 客户端执行相同的操作,看看慢点在哪里。一个一个地运行每个命令将允许您查看在放入包含许多文件的文件夹和空文件夹时哪些确切的步骤执行不同。

您还应该考虑到性能问题可能与 FTP 无关。仅仅因为这是您看到问题的渠道,并不意味着(仅作为示例)操作系统在处理大型文件夹(如 NT 过去那样)时不仅速度慢。FTP 是您看到此错误的方式,这并不意味着它与原因有关。

为了测试这一点,我将直接访问服务器并访问包含文件的文件夹。

最后,如果这些都没有给你任何线索,我可能会尝试在不同的端点上做同样的事情,看看是否存在持续存在的问题。

于 2012-10-03T15:40:22.683 回答
1

您在 FTP 上总是会遇到这么多文件的问题,这是一个常见问题,与 JMS 无关,要确认这一点,请使用像 filezilla 这样的 ftp 客户端并尝试列出 2000 个文件所在的目录...

于 2012-10-04T00:02:50.817 回答
1

我相信无论您是否执行显式目录列表,总会有一个推断的目录列表来确定文件写入操作是覆盖还是创建。

这为您提供了其他解决方法。

您应该在输出中创建新文件夹。实施散列方案以帮助文件夹命名,以便您知道文件夹不会被填充太多。例如,而不是file1234.ext考虑file/1/2/3/4.ext.

于 2012-10-04T03:30:43.923 回答