Erkennung oder verhindern Sie Commons Net ftpclient blockieren auf dem Lesen
-
20-09-2019 - |
Frage
Ich benutze das Commons -Netz FTPClient
Klasse, um eine FTP -Site regelmäßig zu befragen und eine Datei herunterzuladen. Gelegentlich blockiert der Thread auf unbestimmte Zeit, wenn er versucht, von der Website zu lesen, und ich fragte mich, ob jemand anderes auf dieses Problem gestoßen war und irgendwelche Problemumgehungen anbieten könnte.
Ich benutze FTPClient
's retrieveFileStream(String)
Methode, um einen Griff für einen Inputstream zu erhalten, aus dem ich dann versuche zu lesen. Unten finden Sie eine Teilstapelspur des blockierten Fadens.
"FTP File Poll Thread" prio=10 tid=0x083b0800 nid=0x6324 runnable [0x65b5b000..0x65b5beb0]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
- locked <0x5c851928> (a java.io.BufferedInputStream)
at java.io.FilterInputStream.read(FilterInputStream.java:66)
at java.io.PushbackInputStream.read(PushbackInputStream.java:122)
at org.apache.commons.net.io.FromNetASCIIInputStream.__read(FromNetASCIIInputStream.java:75)
at org.apache.commons.net.io.FromNetASCIIInputStream.read(FromNetASCIIInputStream.java:170)
at java.io.FilterInputStream.read(FilterInputStream.java:116)
Lösung 2
Der hier verwendete Kludge sollte hier eine Aufgabe planen, um eine Warnung zu erhöhen, wenn die FTP -Operation länger als x Sekunden dauerte. Ich habe tatsächlich gefunden Javanioftp Auf SourceForge, aber in meiner Situation garantiert es den Entwicklungsaufwand beim Umschalten von Kunden nicht.
Andere Tipps
Java.io blockiert, Sie müssen das Java.nio -Paket verwenden. Nie FTP mit Java.nio verwendet, aber gehen Sie davon aus, dass es funktionieren muss, da HTTP mit Java.nio arbeiten kann.
Grüße