У меня возникла проблема с FTP-опросом Mule ESB отдельно: Приложение работало в течение нескольких дней без проблем, а затем опрос FTP прекратился без предупреждения или ошибки.Mule FTP опрос останавливается без ошибок или предупреждения
Журналы показывали признаки активности для FTP-опроса, пока он не остановился. Впоследствии ничего, но другие разъемы все еще активны (в основном, опрос SFTP). Я включил протокол DEBUG во время выполнения, чтобы узнать, была ли еще активность, а соответствующие потоки соединителей были полностью бесшумными, как если бы они остановились или заблокированы.
В конце концов, перезапуск приложения разрешил проблему временно, но я пытаюсь понять, почему это произошло, чтобы избежать столкновения с ней снова. Мое подозрение в том, что потоки соединителей FTP либо остановлены, либо заблокированы, что предотвращает дальнейшие опросы.
Это может быть вызвано расширенным FtpMessageReceiver, которое мы использовали для предотвращения удаления файла после опроса (переопределение функции postProcess()). Однако, глядя в исходный код как этого компонента, так и базового FTP-приемника и соединителя, я не вижу, как это может произойти.
Любая идея, почему опрос внезапно прекратится без ошибки?
Вот текущая конфигурация разъема:
<ftp:connector name="nonDeletingFtpConnector" doc:name="FTP"
pollingFrequency="${frequency}"
validateConnections="true">
<reconnect frequency="${frequency}" count="${count}"/>
<service-overrides messageReceiver="my.comp.NonDeletingFtpMessageReceiver" />
</ftp:connector>
И соответствующая конечная точка:
<ftp:inbound-endpoint host="${ftp.source.host}"
port="${ftp.source.port}"
path="${ftp.source.path}"
user="${ftp.source.login}"
responseTimeout="10000"
password="${ftp.source.password}"
connector-ref="archivingFtpConnector"
pollingFrequency="${ftp.default.polling.frequency}">
<file:filename-wildcard-filter pattern="*.zip"/>
</ftp:inbound-endpoint>
Код MessageReceiver:
public class NonDeletingFtpMessageReceiver extends FtpMessageReceiver {
public NonDeletingFtpMessageReceiver(Connector connector, FlowConstruct flowConstruct, InboundEndpoint endpoint, long frequency) throws CreateException {
super(connector, flowConstruct, endpoint, frequency);
}
@Override
protected void postProcess(FTPClient client, FTPFile file, MuleMessage message) throws Exception {
//do nothing
}
}
Как вы можете видеть, что мы определили FtpMessageReceiver к избегайте удаления файла в опросе (это делается дальше по потоку), но, глядя в код, который я не вижу, может вызвать проблемы при пропуске вызова super.postProcess() (который отвечает за удаление файла).
FtpMessageReceiver исходный код, который я посмотрел: https://github.com/mulesoft/mule/blob/mule-3.5.0/transports/ftp/src/main/java/org/mule/transport/ftp/FtpMessageReceiver.java
Техническом конфига:
- Mule Standalone 3.5.0
- Ubuntu 14.04.2 LTS
- Java OpenJDK Runtime Environment (IcedTea 2,5. 6) (7u79-2.5.6-0ubuntu1.14.04.1)
Любая помощь будет оценена по достоинству. Спасибо заранее!
Мы столкнулись с этой проблемой несколько раз в нашем приложении, где не было ошибок в файле журнала, и не было никаких сведений о том, что произошло. Наконец, результирующий перезапуск приложения. Я предпочитаю проверить, есть ли какие-либо проблемы на FTP-сервере при блокировании потоков или ожидании подключения с FTP. – RamakrishnaN
Молодец, я проверил, что вы подключаете FTP-соединение с netstat, и несколько открывшихся нескольких сеансов открыты еще несколько дней. Используя jstack, я смог проследить фиктивный код и написать обходной путь с помощью настраиваемого FtpConnectionFactory; (Я создал еще одну запись, поскольку это было больше связано с Apache Commons Net FTP Client) –
[link] (https://stackoverflow.com/questions/33350649/commons-net-ftpclient-hangs-indefinitely-with-mule) для Другой пост Пьера Б. об этом. – Anssssss