我們有一個代理從JMS隊列中獲取消息並將它們發送到FTP文件夾。我們現在發現,當FTP上的目標目錄已經包含大量文件時,發送到FTP的速度非常慢。 (即當我有一個目錄在2000年左右的文件,它已經花費幾秒鐘)爲什麼FTP發送取決於其目錄大小?
這裏我們代理的代碼(從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 lookes這樣的:對於
<?xml version="1.0" encoding="UTF-8"?>
<endpoint xmlns="http://ws.apache.org/ns/synapse" name="myFTPendpoint">
<address uri="vfs:ftp://USER:[email protected]/path/toSomewhere?vfs.passive=true"/>
</endpoint>
我現在的分析:
- 在VFS中使用FTP時速度很慢。使用本地文件系統時 - 速度很快。
- 文件是微小的 - 所以它不是上傳時間
- 網絡是快速
- 速度在目錄中已經依賴於文件的數量上的FTP!
可能的解決方案?
- 修復了速度問題。禁用目錄列表?
- Workaraound:在輸出創建新的文件夾(即不是一個文件夾被塗抹太多)
是否有人還發現了同樣的問題?如何改進大目錄的FTP速度? 感謝您的任何幫助
好像每次發送消息時都會創建與FTP的連接。有沒有可能改善這種表現?持久連接到FTP? – FiveO 2012-08-28 09:42:22
我們發現速度取決於位於FTP目錄中的文件數量!哇 - 似乎發送到FTP總是使所有文件ls。 – FiveO 2012-09-27 06:52:14