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>
今のところ私の分析:
- VFS で FTP を使用する場合にのみ遅くなります。ローカル ファイル システムを使用すると、高速になります。
- ファイルは小さいので、アップロード時間ではありません
- ネットワークが速い
- !速度は、FTP のディレクトリに既にあるファイルの数に依存します!
可能な解決策?
- 速度の問題を修正します。ディレクトリ リストを無効にしますか?
- 回避策: 出力で新しいフォルダーを作成します (1 つのフォルダーがいっぱいにならないようにします)。
誰かが同じ問題を発見しましたか? また、大きなディレクトリへの FTP 速度を改善するにはどうすればよいでしょうか? 助けてくれてありがとう