Как программировать FTP процесс

Обсуждение вопросов по разработке программ в среде продуктов копорации "Progress Software"
Аватара пользователя
dmitri
Старожил
Сообщения: 1016
Зарегистрирован: 04 авг 2005, 16:19
Откуда: Pennsylvania, USA

Как программировать FTP процесс

Сообщение dmitri » 13 май 2014, 19:05

Как программировать FTP процесс так что бы в случае отказа он не блокировал дальнейшую обработку?

У нас в некоторых batch процессах есть FTP который что то отсылает удаленным клиентам. Процесс иногда подвисает. Иногда клент не доступен, а иногда процесс в середине зависает. Соответственно подвисает и Progress batch. И все дальнейшие в очереди не обрабатываются. Особенно проблемно batch процесс обслуживающий кредитные карты.
Тогда все покупки на кредитку останавливаются. Это редко, но тем не менее очень плохо :(
Я думаю надо отцепить FTP в отдельный процесс. Так что бы кредитные карты продолжали обрабатываться, а запрос на отсылку FTP обрабатывался отдельно. Может поделитись опытом? Есть ли у кого нибудь такое?

Мне кажется что бизнесс процесс (Progress batch) должен создавать запись: кому отправлять - на какой адрес, какой файл, в какой директорий класть, может ешё что то. И продолжать свою работу дальше.
А отдельный процесс будет обрабатывать все эту запросы. Интересно как? Думаю отправлять FTP в background и следить как то за результатом. Вот это самая интереная часть.

Можно сделать и по другому, не отправлять в background. Можно запускать этот FTP процесс из cron каждую минуту. Если нечего обрабатывать то процесс будет умирать. А если есть то брать файл и отправлять, а в конце помечать что выполнено. Если процесс зависает, то через минуту стартует другой и будет обрабатывать уже следующий запрос. Таким образом стопора не будет. Ночью можно все висяшие процессы поубивать.
Dmitri Levin and

Аватара пользователя
dmi
Старожил
Сообщения: 1523
Зарегистрирован: 27 сен 2001, 03:00
Откуда: Москва

Re: Как программировать FTP процесс

Сообщение dmi » 13 май 2014, 20:55

У нас написан фреймворк, который интеграционную информацию (XML, binary-файл, текст) умеет отправлять по протоколам файл, SonicMQ, веб-сервис, ODBC-соединение (Oracle,MSSQL,Sybase DataServer). Есть определенные матрицы статусов, возможные переходы, обратные квитки итд (если применимо).

Информация кладется в интеграционную таблицу и flow программы идет дальше.
Запущены отдельные универсальные процессы листенеры/сендеры, которые обрабатывают интеграционные сообщения (по абоненту, типу и статусу), забирают их и отсылают куда надо.
За таким циклическим процессом проще следить, к примеру лог не обновляется 3 минуты - алерт.

Развяжи batch и ftp.

А почему вы не используете jms? (sonic mq)
/dmi

http://pro4gl.ru - 4gl блог

Аватара пользователя
dmitri
Старожил
Сообщения: 1016
Зарегистрирован: 04 авг 2005, 16:19
Откуда: Pennsylvania, USA

Re: Как программировать FTP процесс

Сообщение dmitri » 14 май 2014, 20:26

batch и ftp обязательно развяжу. А вот технологии типа jms, SonicMQ применить наверно не удастся. У нас 100000 клиентов и мы не можем ничего установить на их машинах, все что нам известно о них это название сервера, логин и пароль для FTP. Я даже не знаю что на другом конце: Windows, unix, или что то другое.
Dmitri Levin and

Аватара пользователя
dmi
Старожил
Сообщения: 1523
Зарегистрирован: 27 сен 2001, 03:00
Откуда: Москва

Re: Как программировать FTP процесс

Сообщение dmi » 15 май 2014, 23:05

/dmi



http://pro4gl.ru - 4gl блог

Аватара пользователя
dmitri
Старожил
Сообщения: 1016
Зарегистрирован: 04 авг 2005, 16:19
Откуда: Pennsylvania, USA

Re: Как программировать FTP процесс

Сообщение dmitri » 20 май 2014, 21:58

Последний вариант. Программа должна что то отправить одному из 100000 клиентов, не всем конечно. Она бодро запускает FTP, который не возвращается и висит. Адреса, логины и пароли клиентов записаны в нашей базе. Если клиент не правильно что то указал или изменил и не сообшил нам -- это его проблемы. А если наш процесс завис, не важно почему -- это уже наши проблемы так как все остальные клиенты в очереди не обрабатываются.
Dmitri Levin and

Аватара пользователя
dmitri
Старожил
Сообщения: 1016
Зарегистрирован: 04 авг 2005, 16:19
Откуда: Pennsylvania, USA

Re: Как программировать FTP процесс

Сообщение dmitri » 22 май 2014, 06:06

Я думаю вместо выполнения FTP внутри прогрессового процесса, создавать запись для ftp-request. Типа

Create ftp-request.
Assign
ftp-request.address
ftp-request.login
ftp-request.password
ftp-request.file-to-send
ftp-request.binary
ftp-request.cd_directory[9] <-- в какой директорий класть
что то в таком духе.

И тогда отдельный процесс, скажем ftpuser from cron, будет обрабатывать все эти запросы, отправлять FTP куда надо.
Это будет много-поточный процесс, так что зависание одного процесса не помешает другим файлам быть отправленными.
И если какой-то FTP процесс будет подвешен, то есть продлится дольше заранее оговоренного интервала, то такой процесс будет убит.
При этом можно будет попробовать повторить убитый FTP через некоторое время, используя несколько попыток.
Dmitri Levin and

Аватара пользователя
dmi
Старожил
Сообщения: 1523
Зарегистрирован: 27 сен 2001, 03:00
Откуда: Москва

Re: Как программировать FTP процесс

Сообщение dmi » 22 май 2014, 11:51

Да. еще статус добавь обязательно и PID процесса
/dmi



http://pro4gl.ru - 4gl блог