{"id":492218,"date":"2026-08-25T21:34:47","date_gmt":"2026-08-25T21:34:47","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=492218"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=492218","title":{"rendered":"\u041f\u0430\u043f\u043a\u0430 \u043a\u0430\u043a \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f: \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u043e\u0431\u043c\u0435\u043d \u0432 .NET \u0431\u0435\u0437 cron, FileSystemWatcher \u0438 \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u0445 \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u0439"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d46\/559\/1e2\/d465591e28384a613545dc3676412eec.png\" alt=\"redb.Route.File\" title=\"redb.Route.File\" width=\"1200\" height=\"630\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/d46\/559\/1e2\/d465591e28384a613545dc3676412eec.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d46\/559\/1e2\/d465591e28384a613545dc3676412eec.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>redb.Route.File<\/figcaption><\/div>\n<\/figure>\n<p><strong>\u041e\u043f\u0440\u043e\u0441 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430, \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0434\u043e\u043f\u0438\u0441\u0438 \u0444\u0430\u0439\u043b\u0430, \u0438\u0434\u0435\u043c\u043f\u043e\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u0438 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 temp+rename: \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u043e\u0431\u043c\u0435\u043d \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0448\u0430\u0433 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430.<\/strong><\/p>\n<p>\u0421\u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u0443 \u043b\u044e\u0431\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0442\u043e\u0440\u0430, \u0447\u0435\u0440\u0435\u0437 \u0447\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0445\u043e\u0434\u044f\u0442 \u0434\u0435\u043d\u044c\u0433\u0438, \u0438 \u043e\u043d \u043d\u0430\u0437\u043e\u0432\u0451\u0442 \u0444\u0430\u0439\u043b\u044b. \u0411\u0430\u043d\u043a \u043a\u043b\u0430\u0434\u0451\u0442 \u0432\u044b\u043f\u0438\u0441\u043a\u0443 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u043d\u0430 \u0448\u0430\u0440\u0435. 1\u0421 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0437\u0430\u043a\u0430\u0437\u044b \u0432 XML \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e. \u041f\u0430\u0440\u0442\u043d\u0451\u0440 \u043f\u043e EDI \u0448\u043b\u0451\u0442\u00a0<code>.edi<\/code>\u00a0\u043d\u0430 FTP. \u0411\u0438\u043b\u043b\u0438\u043d\u0433 \u043d\u043e\u0447\u044c\u044e \u0440\u043e\u043d\u044f\u0435\u0442 CDR-\u0444\u0430\u0439\u043b\u044b \u043d\u0430 \u043f\u0430\u0440\u0443 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442. \u0420\u043e\u0437\u043d\u0438\u0447\u043d\u0430\u044f \u0441\u0435\u0442\u044c \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0435\u0442 \u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0432 CSV, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u0430\u043a \u0431\u044b\u043b\u043e \u0432 2009-\u043c \u0438 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u043c\u0435\u043d\u044f\u0442\u044c. \u0424\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u043e\u0431\u043c\u0435\u043d \u043d\u0435 \u00ab\u043b\u0435\u0433\u0430\u0441\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043a\u043e\u0440\u043e \u0443\u0439\u0434\u0451\u0442\u00bb, \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u043d\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e: \u043e\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u043e\u0449\u0435, \u0447\u0435\u043c \u0435\u0441\u0442\u044c.<\/p>\n<p>\u041f\u0440\u043e\u0449\u0435 \u043e\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u0437\u0430 \u0447\u0430\u0441.\u00a0<code>Directory.GetFiles<\/code>, \u0446\u0438\u043a\u043b,\u00a0<code>File.ReadAllBytes<\/code>, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438, \u0443\u0434\u0430\u043b\u0438\u043b\u0438. \u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0436\u0438\u0437\u043d\u044c. \u0424\u0430\u0439\u043b \u043f\u043e\u0434\u0445\u0432\u0430\u0442\u0438\u043b\u0438, \u043f\u043e\u043a\u0430 \u043f\u0430\u0440\u0442\u043d\u0451\u0440 \u0435\u0433\u043e \u0435\u0449\u0451 \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b, \u0438 \u0432 \u0431\u0430\u0437\u0443 \u0443\u0435\u0445\u0430\u043b\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0437\u0430\u043a\u0430\u0437\u043e\u0432. \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0443\u043f\u0430\u043b\u0430, \u0444\u0430\u0439\u043b \u0443\u0436\u0435 \u0443\u0434\u0430\u043b\u0451\u043d. \u0414\u0432\u0430 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043f\u043e\u0434\u043d\u044f\u043b\u0438 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0444\u0430\u0439\u043b \u0438 \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0434\u0443\u0431\u043b\u0438 \u043f\u043b\u0430\u0442\u0435\u0436\u0435\u0439. \u041a\u0442\u043e-\u0442\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u043b \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u00a0<code>.tmp<\/code>\u00a0\u043e\u0442 \u0430\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441\u0430.\u00a0<code>FileSystemWatcher<\/code>\u00a0\u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043d\u0430 SMB-\u0448\u0430\u0440\u0435. \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u043a\u0430\u0442\u0438\u043b\u0438 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0438 \u0444\u0430\u0439\u043b \u043d\u0430 800 \u041c\u0411 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u00ab\u0443\u0436\u0435 \u043d\u0435 \u0442\u0430\u043c, \u0435\u0449\u0451 \u043d\u0435 \u0442\u0443\u0442\u00bb. \u041a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u044d\u0442\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u0441\u0442\u044b\u043b\u0451\u043c, \u0438 \u0447\u0435\u0440\u0435\u0437 \u0433\u043e\u0434 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439 \u043d\u0435\u0434\u043e-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043d\u0430 2000 \u0441\u0442\u0440\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0445\u043e\u0447\u0435\u0442 \u0442\u0440\u043e\u0433\u0430\u0442\u044c.<\/p>\n<p><code>redb.Route.File<\/code>\u00a0\u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0433\u043e\u0442\u043e\u0432\u044b\u043c \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043e\u043c. \u041a\u0430\u0442\u0430\u043b\u043e\u0433 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0435, \u0440\u043e\u0432\u043d\u043e \u043a\u0430\u043a \u043e\u0447\u0435\u0440\u0435\u0434\u044c Kafka \u0438\u043b\u0438 HTTP-\u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442: \u043e\u043f\u0440\u043e\u0441 \u0441 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u043c, \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435, \u043f\u043e\u043a\u0430 \u0444\u0430\u0439\u043b \u0434\u043e\u043f\u0438\u0441\u0430\u043d, \u0438\u0434\u0435\u043c\u043f\u043e\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c, \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u00ab\u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438\u00bb, \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b. \u0422\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 DSL, \u0442\u0435 \u0436\u0435 EIP-\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u043f\u043e\u0441\u043b\u0435\u00a0<code>From<\/code>, \u0442\u0430 \u0436\u0435 \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u044f. \u0414\u0430\u043b\u044c\u0448\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043f\u043e \u0448\u0430\u0433\u0430\u043c, \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u0432\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u0443 \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u043b\u0435\u0440\u0430.<\/p>\n<h3>\u0424\u0430\u0439\u043b \u0437\u0430 \u043c\u0438\u043d\u0443\u0442\u0443<\/h3>\n<pre><code>services.AddRedbRoute(route =&gt;{    route.Services.AddRedbRouteFile();    route.AddRouteBuilder&lt;MyRoutes&gt;();});<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>using redb.Route.File.Fluent;\/\/ \u0427\u0438\u0442\u0430\u0435\u043c \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 CSV \u0438 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0435 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044cFrom(FileDsl.Read(\"\/data\/incoming\")        .Include(\"*.csv\")        .MinAge(2000)        .SortBy(\"Modified\")        .MoveTo(\"\/data\/processed\"))    .Log(\"\u0412\u0437\u044f\u043b\u0438 ${header.redbFile.Name}, ${header.redbFile.Length} \u0431\u0430\u0439\u0442\")    .To(\"direct:\/\/parse\");\/\/ \u041f\u0438\u0448\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430 \u0434\u0438\u0441\u043a \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043eFrom(\"direct:\/\/export\")    .To(FileDsl.Write(\"\/data\/outgoing\")        .FileName(\"${header.orderId}.json\")        .TempPrefix(\".tmp-\"));<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u0441\u0451. \u041f\u0430\u043a\u0435\u0442 \u043d\u0435 \u0442\u044f\u043d\u0435\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439, \u0441\u0445\u0435\u043c\u0430\u00a0<code>file<\/code>\u00a0\u0434\u0430\u043b\u044c\u0448\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0438 \u0432\u043e \u0444\u043b\u044e\u0435\u043d\u0442\u043d\u043e\u043c \u0432\u0438\u0434\u0435, \u0438 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 URI.<\/p>\n<h3>\u042d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u044d\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430 \u0438\u043b\u0438 \u0431\u0438\u043b\u0434\u0435\u0440<\/h3>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0434\u0432\u0443\u043c\u044f \u0440\u0430\u0432\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438: \u0442\u0438\u043f\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c \u0431\u0438\u043b\u0434\u0435\u0440\u043e\u043c \u0432 \u043a\u043e\u0434\u0435 \u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u043c URI, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043b\u0430\u0434\u0451\u0442\u0441\u044f \u0432\u00a0<code>appsettings.json<\/code>\u00a0\u0438 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0438. \u041a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043e\u043d\u0438 \u0432 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435, \u0431\u0438\u043b\u0434\u0435\u0440 \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443.<\/p>\n<pre><code>\/\/ \u0424\u043b\u044e\u0435\u043d\u0442\u043d\u043eFrom(FileDsl.Read(\"\/data\/incoming\").Include(\"*.csv,*.xml\").Recursive().Delete())\/\/ \u0421\u0442\u0440\u043e\u043a\u043e\u0439 (\u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e)From(\"file:\/\/\/data\/incoming?include=*.csv,*.xml&amp;recursive=true&amp;delete=true\")<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0430 Windows \u043f\u0443\u0442\u044c \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u043a\u0430\u043a\u00a0<code>file:\/\/\/C:\/data\/incoming<\/code>, \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u0441\u043b\u044d\u0448 \u0441\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u042d\u0442\u043e \u043c\u0435\u043b\u043e\u0447\u044c, \u043d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u043d\u0435\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u043f\u043e\u0442\u044b\u043a\u0430\u044e\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433 \u043f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u0435\u0442 \u043c\u0435\u0436\u0434\u0443 \u043c\u0430\u0448\u0438\u043d\u0430\u043c\u0438.<\/p>\n<h3>\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u043c\u0435\u043d\u0430: \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0435\u0449\u0451 \u043f\u0438\u0448\u0443\u0442<\/h3>\n<p>\u041d\u0438 \u043e\u0434\u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0435 \u0434\u0430\u0451\u0442 \u0432\u0430\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u00ab\u0437\u0430\u043f\u0438\u0441\u044c \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u0430\u00bb. \u041f\u0430\u0440\u0442\u043d\u0451\u0440 \u043e\u0442\u043a\u0440\u044b\u043b \u043f\u043e\u0442\u043e\u043a, \u043b\u044c\u0451\u0442 300 \u041c\u0411 \u043f\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u043a\u0430\u043d\u0430\u043b\u0443, \u0430 \u0432\u0430\u0448 \u043f\u043e\u043b\u043b\u0435\u0440 \u0443\u0436\u0435 \u0443\u0432\u0438\u0434\u0435\u043b \u0438\u043c\u044f \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435. \u0414\u0430\u043b\u044c\u0448\u0435 \u0432\u043e\u043f\u0440\u043e\u0441 \u043d\u0435 \u00ab\u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043b\u0438\u00bb, \u0430 \u00ab\u043a\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u043e\u00bb. \u041a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440 \u0434\u0430\u0451\u0442 \u0448\u0435\u0441\u0442\u044c \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432, \u0438 \u0432 \u043f\u0440\u043e\u0434\u0435 \u043e\u0431\u044b\u0447\u043d\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u044e\u0442 \u0434\u0432\u0430.<\/p>\n<p><strong>\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u043e\u0437\u0440\u0430\u0441\u0442.<\/strong>\u00a0\u0421\u0430\u043c\u043e\u0435 \u0434\u0435\u0448\u0451\u0432\u043e\u0435: \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0442\u044c \u0444\u0430\u0439\u043b, \u043f\u043e\u043a\u0430 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435 \u043f\u0440\u043e\u0448\u043b\u043e N \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434.<\/p>\n<pre><code>FileDsl.Read(\"\/data\/incoming\").MinAge(5000)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430.<\/strong>\u00a0\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f\u00a0<code>Changed<\/code>\u00a0\u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0438 \u0432\u0440\u0435\u043c\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0438 \u043e\u0442\u0434\u0430\u0451\u0442 \u0444\u0430\u0439\u043b, \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0440\u0430\u0441\u0442\u0438 \u043d\u0430 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. \u042d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0432\u044b\u0433\u0440\u0443\u0437\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0438\u0448\u0443\u0442\u0441\u044f \u043c\u0438\u043d\u0443\u0442\u0430\u043c\u0438.<\/p>\n<pre><code>FileDsl.Read(\"\/data\/incoming\")    .ReadLock(\"Changed\")    .ReadLockCheckInterval(1000)   \/\/ \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u0441\u043c\u043e\u0442\u0440\u0438\u043c    .ReadLockMinAge(5000)          \/\/ \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b\u043c    .ReadLockTimeout(120000)       \/\/ \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0436\u0434\u0451\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041c\u0430\u0440\u043a\u0435\u0440\u043d\u044b\u0439 \u0444\u0430\u0439\u043b.<\/strong>\u00a0\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f\u00a0<code>MarkerFile<\/code>\u00a0\u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0440\u044f\u0434\u043e\u043c\u00a0<code>\u0438\u043c\u044f.redbLock<\/code>\u00a0\u0447\u0435\u0440\u0435\u0437\u00a0<code>FileMode.CreateNew<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u041e\u0421. \u0412\u0442\u043e\u0440\u043e\u0439 \u0438\u043d\u0441\u0442\u0430\u043d\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0432\u0438\u0434\u0438\u0442 \u043c\u0430\u0440\u043a\u0435\u0440, \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442. \u042d\u0442\u043e \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u00ab\u0434\u0432\u0430 \u043f\u043e\u0434\u0430 \u0447\u0438\u0442\u0430\u044e\u0442 \u043e\u0434\u043d\u0443 \u0448\u0430\u0440\u0443\u00bb: \u0433\u043e\u043d\u043a\u0443 \u0432\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u0438\u043d, \u043f\u0440\u043e\u0438\u0433\u0440\u0430\u0432\u0448\u0438\u0439 \u0434\u0430\u0436\u0435 \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0444\u0430\u0439\u043b.<\/p>\n<pre><code>FileDsl.Read(\"\/mnt\/share\/in\").ReadLock(\"MarkerFile\")<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u042d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u044b\u0439 \u0437\u0430\u0445\u0432\u0430\u0442.<\/strong>\u00a0\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f\u00a0<code>FileLock<\/code>\u00a0\u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0444\u0430\u0439\u043b \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u043e \u0438 \u0434\u0435\u0440\u0436\u0438\u0442 \u0445\u0435\u043d\u0434\u043b \u0432\u0441\u0451 \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u041f\u043e\u043a\u0430 \u043e\u043d \u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f, \u043d\u0438\u043a\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0430\u0439\u043b \u043d\u0435 \u043e\u0442\u043a\u0440\u043e\u0435\u0442 \u043d\u0438 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435, \u043d\u0438 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c. \u0422\u043e\u043d\u043a\u043e\u0441\u0442\u044c, \u0440\u0430\u0434\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044d\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c: \u0445\u0435\u043d\u0434\u043b \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0441 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u0442-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u0432\u043e\u0435\u0433\u043e \u0436\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442 \u0444\u0430\u0439\u043b, \u043d\u0435 \u0434\u043e\u0436\u0438\u0434\u0430\u044f\u0441\u044c \u0441\u043d\u044f\u0442\u0438\u044f \u043b\u043e\u043a\u0430, \u0430 \u0442\u0435\u043b\u043e \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0443\u0436\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0445\u0435\u043d\u0434\u043b, \u0430 \u043d\u0435 \u0432\u0442\u043e\u0440\u044b\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435\u043c.<\/p>\n<pre><code>FileDsl.Read(\"\/data\/incoming\").ReadLock(\"FileLock\")<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435.<\/strong>\u00a0\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f\u00a0<code>Rename<\/code>\u00a0\u0443\u0432\u043e\u0434\u0438\u0442 \u0444\u0430\u0439\u043b \u043f\u043e\u0434 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u043e\u0435 \u0438\u043c\u044f \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043d\u0438\u043c \u0442\u0430\u043c. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c, \u0437\u043d\u0430\u0447\u0438\u0442 \u0444\u0430\u0439\u043b \u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u0442\u043e-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0439, \u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0435\u0433\u043e \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0435\u0442. \u041f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442: \u043f\u043e\u043a\u0430 \u0444\u0430\u0439\u043b \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435, \u0435\u0433\u043e \u043d\u0435\u0442 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u043f\u043e\u0434 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c, \u0442\u0430\u043a \u0447\u0442\u043e \u0447\u0443\u0436\u043e\u0439 \u043f\u043e\u043b\u043b\u0435\u0440 \u043f\u043e \u043c\u0430\u0441\u043a\u0435 \u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0443\u0432\u0438\u0434\u0438\u0442.<\/p>\n<pre><code>FileDsl.Read(\"\/data\/incoming\").ReadLock(\"Rename\")<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u0424\u0430\u0439\u043b-\u0441\u0438\u0433\u043d\u0430\u043b \u043e\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f.<\/strong>\u00a0\u041a\u043b\u0430\u0441\u0441\u0438\u043a\u0430 EDI: \u043f\u0430\u0440\u0442\u043d\u0451\u0440 \u043a\u043b\u0430\u0434\u0451\u0442\u00a0<code>order.csv<\/code>, \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c \u043a\u043b\u0430\u0434\u0451\u0442 \u043f\u0443\u0441\u0442\u043e\u0439\u00a0<code>order.csv.done<\/code>. \u041f\u043e\u043a\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0435\u0442, \u0444\u0430\u0439\u043b\u0430 \u0434\u043b\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.<\/p>\n<pre><code>FileDsl.Read(\"\/data\/incoming\").DoneFileName(\"${file:name}.done\")<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438\u00a0<code>${file:name}<\/code>\u00a0\u0438\u00a0<code>${file:name.noext}<\/code>, \u0442\u0430\u043a \u0447\u0442\u043e \u0441\u0445\u0435\u043c\u0430\u00a0<code>order.csv<\/code>\u00a0\u043f\u043b\u044e\u0441\u00a0<code>order.done<\/code>\u00a0\u0442\u043e\u0436\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f. \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0444\u0430\u0439\u043b-\u0441\u0438\u0433\u043d\u0430\u043b \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c.<\/p>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e: \u043a\u043e\u043d\u0441\u044e\u043c\u0435\u0440 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441\u00a0<code>.redb_<\/code>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u0451, \u0447\u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e\u00a0<code>tempPrefix<\/code>. \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0434\u044e\u0441\u0435\u0440, \u043f\u0438\u0448\u0443\u0449\u0438\u0439 \u0432 \u0442\u043e\u0442 \u0436\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0447\u0435\u0440\u0435\u0437 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u043d\u0435 \u0443\u0441\u0442\u0440\u043e\u0438\u0442 \u0441\u0430\u043c \u0441\u0435\u0431\u0435 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b. \u042d\u0442\u043e \u0442\u0430 \u043c\u0435\u043b\u043e\u0447\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432 \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u043e\u043c \u043f\u043e\u043b\u043b\u0435\u0440\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u044e\u0442 \u043d\u0430 \u0442\u0440\u0435\u0442\u0438\u0439 \u0434\u0435\u043d\u044c.<\/p>\n<h3>\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u0444\u0430\u0439\u043b\u043e\u043c \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/h3>\n<p>\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u043d\u0430 \u043d\u0430 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442, \u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0437\u0430\u0434\u0430\u0442\u044c \u0434\u0432\u0435 \u0441\u0440\u0430\u0437\u0443 \u043f\u0430\u0434\u0430\u0435\u0442 \u043d\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435, \u0430 \u043d\u0435 \u043c\u043e\u043b\u0447\u0430 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041a\u043e\u0433\u0434\u0430 \u0431\u0440\u0430\u0442\u044c<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Noop()<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0424\u0430\u0439\u043b \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041a\u0430\u0442\u0430\u043b\u043e\u0433 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0438\u0442\u0430\u0435\u043c, \u043f\u0440\u0430\u0432\u0430 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0431\u044b\u0442\u044c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Delete()<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0424\u0430\u0439\u043b \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0445\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u00ab\u043c\u0443\u0441\u043e\u0440\u043a\u0430\u00bb, \u0433\u0434\u0435 \u0432\u0430\u0436\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u043a\u0442 \u043f\u0440\u0438\u0451\u043c\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>MoveTo(dir)<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0424\u0430\u0439\u043b \u043f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u0435\u0442 \u0432 \u0430\u0440\u0445\u0438\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0440\u043e\u0434\u0430\u043a\u0448\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: \u0432\u0441\u0435\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u044a\u044f\u0432\u0438\u0442\u044c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>PreMove(dir)<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0424\u0430\u0439\u043b \u043f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u0435\u0442 \u0414\u041e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0435\u0439 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><code>PreMove<\/code>\u00a0\u0437\u0430\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u0431\u044b\u0447\u043d\u043e \u0440\u0435\u0448\u0430\u044e\u0442 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e. \u0424\u0430\u0439\u043b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0432 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u043e\u0434\u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f. \u041f\u0435\u0440\u0435\u043d\u043e\u0441 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0430\u0442\u043e\u043c\u0430\u0440\u0435\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0442\u043e\u0440\u043e\u0439 \u0438\u043d\u0441\u0442\u0430\u043d\u0441 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0451\u0442 \u0444\u0430\u0439\u043b \u0438 \u043f\u043e\u0439\u0434\u0451\u0442 \u0434\u0430\u043b\u044c\u0448\u0435. \u041f\u043b\u044e\u0441 \u0432\u044b \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0438\u0434\u0438\u0442\u0435 \u043f\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435.<\/p>\n<pre><code>FileDsl.Read(\"\/data\/incoming\")    .PreMove(\"\/data\/processing\")    .MoveTo(\"\/data\/archive\")<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e \u043d\u0435\u0443\u0434\u0430\u0447\u0443. \u0415\u0441\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0443\u043f\u0430\u043b\u0430 \u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u043c, \u043f\u043e\u0441\u0442-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f: \u0444\u0430\u0439\u043b \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0440\u043e\u0432\u043d\u043e \u0442\u0430\u043c, \u0433\u0434\u0435 \u0431\u044b\u043b, \u0438 \u043f\u043e\u043f\u0430\u0434\u0451\u0442 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043e\u043f\u0440\u043e\u0441. \u042d\u0442\u043e \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u00ab\u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0441\u043c\u043e\u0433\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c\u00bb \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0445\u0443\u0434\u0448\u0438\u043c \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432. \u041e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u0431\u0438\u0442\u044b\u0439 \u0444\u0430\u0439\u043b \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043d\u043e\u0432\u0430 \u0438 \u0441\u043d\u043e\u0432\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0435 \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438\u00a0<code>OnException<\/code>\u00a0\u043d\u0435 \u043e\u043f\u0446\u0438\u044f, \u0430 \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438:<\/p>\n<pre><code>OnException(typeof(FormatException))    .Handled(true)    .To(FileDsl.Write(\"\/data\/quarantine\"));<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043e\u0431\u043c\u0435\u043d \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u0444\u0430\u0439\u043b \u0443\u0435\u0437\u0436\u0430\u0435\u0442 \u0432 \u043a\u0430\u0440\u0430\u043d\u0442\u0438\u043d \u043a\u043e\u043f\u0438\u0435\u0439, \u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0448\u0442\u0430\u0442\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0435\u0439.<\/p>\n<p>\u0421\u044e\u0434\u0430 \u0436\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0441\u043b\u0443\u0447\u0430\u0439, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u0434\u0443\u043c\u0430\u044e\u0442 \u0437\u0430\u0440\u0430\u043d\u0435\u0435: \u0444\u0430\u0439\u043b \u043d\u0430\u0448\u0451\u043b\u0441\u044f \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435, \u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c. \u041a\u0442\u043e-\u0442\u043e \u0434\u0435\u0440\u0436\u0438\u0442 \u0435\u0433\u043e \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u043e, \u043f\u0440\u0430\u0432\u0430 \u043d\u0435 \u0442\u0435, \u0442\u043e\u043c \u043e\u0442\u0432\u0430\u043b\u0438\u043b\u0441\u044f. \u042d\u0442\u043e \u0442\u043e\u0436\u0435 \u043e\u0442\u043a\u0430\u0437 \u043f\u043e \u0444\u0430\u0439\u043b\u0443, \u0430 \u043d\u0435 \u043f\u0443\u0441\u0442\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435: \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u043d\u043e\u043b\u044c \u0431\u0430\u0439\u0442 \u043f\u043e\u0434 \u0432\u0438\u0434\u043e\u043c \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0444\u0430\u0439\u043b \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435, \u0438 \u0435\u0433\u043e \u0432\u043e\u0437\u044c\u043c\u0443\u0442 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043e\u043f\u0440\u043e\u0441\u0435. \u0417\u0432\u0443\u0447\u0438\u0442 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e \u0440\u043e\u0432\u043d\u043e \u0434\u043e \u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0433\u0434\u0430 \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u0439 \u043f\u043e\u043b\u043b\u0435\u0440 \u043e\u0442\u0434\u0430\u0451\u0442 \u0432\u0430\u043c \u043f\u0443\u0441\u0442\u043e\u0439\u00a0<code>byte[]<\/code>, \u0430 \u0438\u043c\u043f\u043e\u0440\u0442 \u0447\u0435\u0441\u0442\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432 \u0431\u0430\u0437\u0443 \u043d\u043e\u043b\u044c \u0437\u0430\u043a\u0430\u0437\u043e\u0432.<\/p>\n<h3>\u0418\u0434\u0435\u043c\u043f\u043e\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c<\/h3>\n<p>\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0444\u043b\u0430\u0433\u043e\u043c. \u041a\u043b\u044e\u0447 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438, \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434 \u0442\u0435\u043c \u0436\u0435 \u0438\u043c\u0435\u043d\u0435\u043c \u0444\u0430\u0439\u043b \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u043c, \u0430 \u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u0444\u0430\u0439\u043b \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u043d\u0435 \u043f\u043e\u0435\u0434\u0435\u0442.<\/p>\n<pre><code>FileDsl.Read(\"\/data\/incoming\").Noop().Idempotent()<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u0432\u044f\u0437\u043a\u0430\u00a0<code>Noop() + Idempotent()<\/code>\u00a0\u0434\u0430\u0451\u0442 \u0440\u0435\u0436\u0438\u043c \u00ab\u0447\u0438\u0442\u0430\u0435\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u043d\u0438\u0447\u0435\u0433\u043e \u0432 \u043d\u0451\u043c \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u043c, \u043a\u0430\u0436\u0434\u044b\u0439 \u0444\u0430\u0439\u043b \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437\u00bb. \u042d\u0442\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u043c, \u043a\u0443\u0434\u0430 \u0443 \u0432\u0430\u0441 \u043d\u0435\u0442 \u043f\u0440\u0430\u0432 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c, \u0438 \u043e\u043d \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u0447\u0430\u0441\u0442\u044b\u0439 \u043f\u0440\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 \u0447\u0443\u0436\u043e\u0439 \u0448\u0430\u0440\u043e\u0439.<\/p>\n<p>\u0420\u0435\u0435\u0441\u0442\u0440 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 \u0436\u0438\u0432\u0451\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0438 \u044d\u0442\u043e \u043d\u0430\u0434\u043e \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0433\u043e\u043b\u043e\u0432\u0435: \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0430 \u043e\u043d \u043f\u0443\u0441\u0442. \u0412 \u0441\u0432\u044f\u0437\u043a\u0435 \u0441\u00a0<code>Delete<\/code>\u00a0\u0438\u043b\u0438\u00a0<code>MoveTo<\/code>\u00a0\u044d\u0442\u043e \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u0443\u0436\u0435 \u043d\u0435\u0442. \u0412 \u0441\u0432\u044f\u0437\u043a\u0435 \u0441\u00a0<code>Noop<\/code>\u00a0\u0440\u0435\u0441\u0442\u0430\u0440\u0442 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443, \u0438 \u0437\u0430\u0449\u0438\u0442\u0443 \u043e\u0442 \u0434\u0443\u0431\u043b\u0435\u0439 \u0432 \u044d\u0442\u043e\u043c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u043d\u0443\u0436\u043d\u043e \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0438\u0436\u0435 \u043f\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0443.<\/p>\n<h3>\u041e\u0442\u0431\u043e\u0440: \u0447\u0442\u043e \u0431\u0435\u0440\u0451\u043c \u0438 \u0432 \u043a\u0430\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435<\/h3>\n<p>\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u043c \u043e\u0431\u043c\u0435\u043d\u0435 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u043d\u0430\u0447\u0438\u043c. \u041d\u043e\u0447\u043d\u0430\u044f \u043f\u0430\u0447\u043a\u0430 \u0438\u0437 4000 \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044e\u0442 \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0434\u0430\u0451\u0442 \u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0441\u043a\u043b\u0430\u0434\u0430, \u0440\u0430\u0437\u044a\u0435\u0437\u0436\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<pre><code>FileDsl.Read(\"\/data\/incoming\")    .Include(\"*.csv,*.xml\")      \/\/ \u043c\u0430\u0441\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e, * \u0438 ?    .Exclude(\"*.tmp,~*\")    .SortBy(\"Modified\")          \/\/ Name, NameDesc, Modified, ModifiedDesc, Size, SizeDesc    .MaxMessagesPerPoll(200)     \/\/ \u043f\u043e\u0440\u0446\u0438\u044f \u0437\u0430 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0445\u043e\u0434    .Recursive()    .Delay(1000)                 \/\/ \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043e\u043f\u0440\u043e\u0441\u0430, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 500 \u043c\u0441<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>MaxMessagesPerPoll<\/code>\u00a0\u0432 \u043f\u0430\u0440\u0435 \u0441 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u044d\u0442\u043e \u0432\u0430\u0448 \u0440\u0435\u0433\u0443\u043b\u044f\u0442\u043e\u0440 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u041f\u0440\u0438\u0448\u043b\u043e 40 000 \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u0441\u0443\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u044f \u043f\u0430\u0440\u0442\u043d\u0451\u0440\u0430, \u0430 \u0432\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442\u0435 \u0438\u0445 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u043c\u0438 \u043f\u043e\u0440\u0446\u0438\u044f\u043c\u0438 \u043e\u0442 \u0441\u0442\u0430\u0440\u044b\u0445 \u043a \u043d\u043e\u0432\u044b\u043c, \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u0430 40 000 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0443\u0440\u043e\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441.<\/p>\n<p>\u041c\u0430\u0441\u043a\u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0431\u0435\u0437 \u0443\u0447\u0451\u0442\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, \u0447\u0442\u043e \u043d\u0430 Linux \u0441\u043f\u0430\u0441\u0430\u0435\u0442 \u043e\u0442 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u00ab\u043f\u0440\u0438\u0441\u043b\u0430\u043b\u0438\u00a0<code>ORDERS.CSV<\/code>, \u0430 \u043c\u0430\u0441\u043a\u0430\u00a0<code>*.csv<\/code>\u00bb.<\/p>\n<h3>\u0417\u0430\u043f\u0438\u0441\u044c: temp \u043f\u043b\u044e\u0441 rename, \u0430 \u043d\u0435 \u00ab\u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f\u00bb<\/h3>\n<p>\u041f\u0440\u043e\u0434\u044e\u0441\u0435\u0440 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0435\u0448\u0430\u0435\u0442 \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443. \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u0438\u0448\u0435\u0442\u0435 \u0444\u0430\u0439\u043b \u043f\u0440\u044f\u043c\u043e \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0438\u0442\u0430\u0435\u0442 \u043f\u0430\u0440\u0442\u043d\u0451\u0440, \u043e\u043d \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0435\u0442 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443.<\/p>\n<pre><code>From(\"direct:\/\/export\")    .To(FileDsl.Write(\"\/data\/outgoing\")        .FileName(\"orders-${header.batchId}.json\")        .TempPrefix(\".tmp-\")        .AutoCreate());<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0435\u043b\u043e \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u0432\u00a0<code>.tmp-orders-42.json<\/code>, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0444\u0430\u0439\u043b \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0446\u0435\u043b\u0435\u0432\u043e\u0435 \u0438\u043c\u044f. \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0430\u0440\u0442\u043d\u0451\u0440 \u0432\u0438\u0434\u0438\u0442 \u043b\u0438\u0431\u043e \u043d\u0438\u0447\u0435\u0433\u043e, \u043b\u0438\u0431\u043e \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u0446\u0435\u043b\u0438\u043a\u043e\u043c. \u041f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u041f\u0440\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0443\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0437\u0430 \u0441\u043e\u0431\u043e\u0439.<\/p>\n<p>\u0418\u043c\u044f \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0431\u0435\u0440\u0451\u0442\u0441\u044f, \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430, \u0438\u0437 \u043e\u043f\u0446\u0438\u0438\u00a0<code>FileName<\/code>\u00a0(\u0441 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u043c\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u043c \u0438 \u0442\u0435\u043b\u0443), \u0438\u0437 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u00a0<a href=\"http:\/\/redbFile.Name\" rel=\"noopener noreferrer nofollow\"><code>redbFile.Name<\/code><\/a>, \u0430 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u043d\u0438 \u0442\u043e\u0433\u043e \u043d\u0438 \u0434\u0440\u0443\u0433\u043e\u0433\u043e, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a\u00a0<code>redb-{guid}<\/code>. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u0435\u0435, \u0447\u0435\u043c \u043a\u0430\u0436\u0435\u0442\u0441\u044f: \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u00a0<code>From(kafka).To(file)<\/code>\u00a0\u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u043c\u0435\u043d\u0438.<\/p>\n<p>\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0444\u0430\u0439\u043b \u0443\u0436\u0435 \u0435\u0441\u0442\u044c, \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\"><code>FileExist<\/code><\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Override<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Append<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043a\u043e\u043d\u0435\u0446<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Fail<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0411\u0440\u043e\u0441\u0438\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Ignore<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0422\u0438\u0445\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Move<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0442\u043b\u043e\u0436\u0438\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0432\u00a0<code>.bak<\/code>, \u0437\u0430\u0442\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>TryRename<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u043c\u0435\u0442\u043a\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><code>Ignore<\/code>\u00a0\u0438\u00a0<code>Fail<\/code>\u00a0\u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u044d\u043a\u0437\u043e\u0442\u0438\u043a\u043e\u0439 \u0440\u043e\u0432\u043d\u043e \u0434\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438, \u0433\u0434\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0442\u043e\u0433\u043e \u0436\u0435 \u0438\u043c\u0435\u043d\u0438 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u0443\u044e \u043e\u0442\u0433\u0440\u0443\u0437\u043a\u0443 \u0442\u043e\u0432\u0430\u0440\u0430.<\/p>\n<h3>\u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u044d\u0442\u043e \u043d\u0435\u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0439 \u0432\u0432\u043e\u0434<\/h3>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0430\u0431\u0437\u0430\u0446\u0430: \u0435\u0441\u043b\u0438\u00a0<code>FileName<\/code>\u00a0\u043d\u0435 \u0437\u0430\u0434\u0430\u043d, \u0438\u043c\u044f \u043f\u0440\u0438\u0435\u0437\u0436\u0430\u0435\u0442 \u0438\u0437 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u00a0<a href=\"http:\/\/redbFile.Name\" rel=\"noopener noreferrer nofollow\"><code>redbFile.Name<\/code><\/a>. \u0410 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0442\u0443\u0434\u0430 \u043f\u043e\u043b\u043e\u0436\u0438\u043b \u043a\u0442\u043e-\u0442\u043e: \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0444\u0430\u0439\u043b \u043f\u0430\u0440\u0442\u043d\u0451\u0440\u0430, HTTP-\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430, \u043f\u043e\u043b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438. \u0422\u043e \u0435\u0441\u0442\u044c \u0432 \u0442\u0438\u043f\u0438\u0447\u043d\u043e\u043c \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0435\u00a0<code>From(http).To(file)<\/code>\u00a0\u0438\u043c\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0442\u043e\u0442, \u043a\u0442\u043e \u0448\u043b\u0451\u0442 \u0437\u0430\u043f\u0440\u043e\u0441.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0434\u044e\u0441\u0435\u0440 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0435 \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u044c \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u0441\u0432\u043e\u0435\u0433\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430. \u0418\u043c\u044f \u0432\u0438\u0434\u0430\u00a0<code>..\/..\/etc\/cron.d\/backdoor<\/code>\u00a0\u0438\u043b\u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0434\u0430\u044e\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0430 \u043d\u0435 \u0444\u0430\u0439\u043b \u0432 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435. \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u0437\u043d\u0430\u0442\u044c \u043f\u0440\u043e \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439 \u043f\u0443\u0442\u044c: \u043e\u0431\u044b\u0447\u043d\u044b\u0439\u00a0<code>Path.Combine<\/code>\u00a0\u0432 .NET \u043d\u0430 \u043d\u0451\u043c \u043c\u043e\u043b\u0447\u0430 \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u043e, \u0447\u0442\u043e \u0435\u043c\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u00ab\u043c\u044b \u0436\u0435 \u0441\u043a\u043b\u0435\u0438\u0432\u0430\u0435\u043c \u0441 \u0431\u0430\u0437\u043e\u0439\u00bb \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f.<\/p>\n<pre><code>\/\/ \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: \u043f\u0438\u0448\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0443\u0442\u0440\u044c \/data\/outgoingFileDsl.Write(\"\/data\/outgoing\")\/\/ \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u043d\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u043c \u0432\u044b\u0445\u043e\u0434 \u043d\u0430\u0440\u0443\u0436\u0443FileDsl.Write(\"\/data\/outgoing\").JailStartingDirectory(false)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u043f\u0446\u0438\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u0443 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0424\u0421, FTP \u0438 SFTP, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043e\u0434\u043d\u043e \u043d\u0430 \u0432\u0441\u0435 \u0442\u0440\u0438 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430.<\/p>\n<h3>\u0416\u0443\u0440\u043d\u0430\u043b \u0432 \u0444\u0430\u0439\u043b \u0447\u0435\u0440\u0435\u0437 Append<\/h3>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c: append \u0441 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u043c. \u041f\u0440\u0438\u0451\u043c\u043d\u044b\u0439 \u043b\u043e\u0433, \u0430\u0443\u0434\u0438\u0442-\u0442\u0440\u0435\u0439\u043b, \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 CSV \u0437\u0430 \u0434\u0435\u043d\u044c \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430.<\/p>\n<pre><code>From(\"direct:\/\/audit\")    .To(FileDsl.Write(\"\/var\/log\/app\")        .FileName(\"audit-${dateFormat(now(), 'yyyyMMdd')}.log\")        .FileExist(\"Append\")        .AppendChars(\"\\n\"));<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418\u043c\u044f \u0441 \u0434\u0430\u0442\u043e\u0439 \u0432 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0440\u043e\u0442\u0430\u0446\u0438\u044f \u043f\u043e \u0441\u0443\u0442\u043a\u0430\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u0430 \u0441\u043e\u0431\u043e\u0439, \u0431\u0435\u0437 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430.<\/p>\n<h3>\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438: \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0435\u0434\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u0432\u0435\u0441\u044c \u043c\u0430\u0440\u0448\u0440\u0443\u0442<\/h3>\n<p>\u041a\u043e\u043d\u0441\u044e\u043c\u0435\u0440 \u043a\u043b\u0430\u0434\u0451\u0442 \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c\u00a0<code>redbFile.<\/code>, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u0434\u0430\u043b\u044c\u0448\u0435 \u0432 \u043b\u044e\u0431\u043e\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438, \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u0435 \u0438\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"http:\/\/redbFile.Name\" rel=\"noopener noreferrer nofollow\"><code>redbFile.Name<\/code><\/a><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>order-42.csv<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>redbFile.NameOnly<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>order-42<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>redbFile.Extension<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>.csv<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>redbFile.AbsolutePath<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0447\u0442\u0435\u043d\u0438\u044f<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>redbFile.RelativePath<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0443\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u043e\u043f\u0440\u043e\u0441\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>redbFile.Parent<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0420\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>redbFile.Length<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0420\u0430\u0437\u043c\u0435\u0440 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>redbFile.LastModified<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>DateTimeOffset<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041f\u0440\u043e\u0434\u044e\u0441\u0435\u0440 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u00a0<code>redbFile.NameProduced<\/code>\u00a0\u0441 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0443\u0442\u0451\u043c, \u043a\u0443\u0434\u0430 \u0444\u0430\u0439\u043b \u043b\u0451\u0433. \u041f\u043b\u044e\u0441 \u043a \u044d\u0442\u043e\u043c\u0443 \u043f\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044e \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f\u00a0<code>ContentType<\/code>\u00a0\u0434\u043b\u044f\u00a0<code>.json<\/code>,\u00a0<code>.xml<\/code>,\u00a0<code>.csv<\/code>,\u00a0<code>.txt<\/code>,\u00a0<code>.log<\/code>,\u00a0<code>.html<\/code>, \u0442\u0430\u043a \u0447\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u0441\u0440\u0430\u0437\u0443 \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e \u0435\u043c\u0443 \u043f\u0440\u0438\u0441\u043b\u0430\u043b\u0438.<\/p>\n<p>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u0432\u0438\u0434\u0435\u043d \u043d\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e \u0438\u043c\u0435\u043d\u0438, \u0430 \u0435\u0451 \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u043c \u043e\u0431\u043c\u0435\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b:<\/p>\n<pre><code>From(FileDsl.Read(\"\/data\/in\").Recursive().MoveTo(\"\/data\/archive\"))    .Choice(c =&gt; c        .When(Header(\"redbFile.Extension\").isEqualTo(\".xml\").Matches,              w =&gt; w.To(\"direct:\/\/xml\"))        .When(Header(\"redbFile.Name\").startsWith(\"INV_\").Matches,              w =&gt; w.To(\"direct:\/\/invoices\"))        .Otherwise(o =&gt; o.To(\"direct:\/\/unknown\")));<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h3>\u0411\u043e\u043b\u044c\u0448\u0438\u0435 \u0444\u0430\u0439\u043b\u044b: \u043d\u0435 \u0447\u0438\u0442\u0430\u0442\u044c \u0446\u0435\u043b\u0438\u043a\u043e\u043c<\/h3>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0442\u0435\u043b\u043e \u044d\u0442\u043e\u00a0<code>byte[]<\/code>, \u0447\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435\u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u043e \u0434\u043b\u044f CDR-\u0444\u0430\u0439\u043b\u0430 \u043d\u0430 \u0434\u0432\u0430 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u0430. \u0420\u0435\u0436\u0438\u043c\u00a0<code>StreamBody<\/code>\u00a0\u043e\u0442\u0434\u0430\u0451\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0432\u043c\u0435\u0441\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u0438 \u043f\u043e\u0442\u043e\u043a \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043e\u0431\u043c\u0435\u043d\u043e\u043c.<\/p>\n<pre><code>From(FileDsl.Read(\"\/data\/cdr\").Include(\"*.dat\").StreamBody().MoveTo(\"\/data\/done\"))    .Split(ex =&gt; ReadLines((Stream)ex.In.Body!))    .To(\"direct:\/\/cdr-record\");<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u00ab\u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433\u043e\u0432\u043e\u0435 \u0442\u0435\u043b\u043e \u043f\u043b\u044e\u0441 \u0441\u043f\u043b\u0438\u0442\u0442\u0435\u0440\u00bb \u044d\u0442\u043e \u0442\u043e, \u0440\u0430\u0434\u0438 \u0447\u0435\u0433\u043e \u0441\u043f\u043b\u0438\u0442\u0442\u0435\u0440 \u0432 ESB \u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442: \u0444\u0430\u0439\u043b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e, \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0434\u043d\u0443 \u0437\u0430\u043f\u0438\u0441\u044c, \u0430 \u043d\u0435 \u0432\u0435\u0441\u044c \u0444\u0430\u0439\u043b.<\/p>\n<h3>\u0424\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u0430\u043a \u043a\u0430\u043c\u0435\u0440\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f<\/h3>\n<p>\u0415\u0441\u0442\u044c \u0441\u043c\u0435\u0436\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430, \u0438 \u043e\u043d\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f\u0445. \u0422\u0435\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435, \u0430 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0448\u0430\u0433\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u0435\u0433\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0441\u043c\u043e\u0442\u0440\u044f\u0442. \u0414\u0430\u043b\u044c\u0448\u0435 \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u0431\u0440\u043e\u043a\u0435\u0440, HTTP-\u0432\u044b\u0437\u043e\u0432, \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0441\u0435\u0440\u0432\u0438\u0441, \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0447\u0435\u0441\u0442\u043d\u043e \u0442\u0430\u0449\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0431\u044f \u0434\u0432\u0435\u0441\u0442\u0438 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u043c\u0443 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b.<\/p>\n<p>\u041f\u0430\u0442\u0442\u0435\u0440\u043d Claim Check (\u0425\u043e\u0443\u043f \u0438 \u0412\u0443\u043b\u044c\u0444) \u0440\u0435\u0448\u0430\u0435\u0442 \u044d\u0442\u043e \u043a\u0430\u043a \u0433\u0430\u0440\u0434\u0435\u0440\u043e\u0431: \u0442\u0435\u043b\u043e \u0441\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u0430 \u043f\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0443 \u0435\u0434\u0435\u0442 \u043d\u043e\u043c\u0435\u0440\u043e\u043a. \u0420\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043b\u043e \u0442\u0430\u043c, \u0433\u0434\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0443\u0436\u043d\u043e.<\/p>\n<p>\u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u043e\u0435, \u0438 \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u043c\u0438\u0440\u0430 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440 \u044d\u0442\u043e \u0441\u0430\u043c\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430:\u00a0<code>FileClaimCheckRepository<\/code>\u00a0\u043a\u043b\u0430\u0434\u0451\u0442 \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u0434\u0430\u0447\u0443 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c \u0440\u044f\u0434\u043e\u043c \u0441 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438 TTL. \u0414\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0442\u0435\u043b \u044d\u0442\u043e \u0434\u0435\u0448\u0435\u0432\u043b\u0435 \u043f\u0430\u043c\u044f\u0442\u0438, \u0430 \u043d\u0430 \u043e\u0431\u0449\u0435\u0439 \u0448\u0430\u0440\u0435 \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a, \u0438 \u043f\u0435\u0440\u0435\u0435\u0437\u0434 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0439 \u0438\u043d\u0441\u0442\u0430\u043d\u0441.<\/p>\n<pre><code>private readonly IClaimCheckRepository _claims =    new FileClaimCheckRepository(\"\/data\/claims\", TimeSpan.FromHours(6));From(FileDsl.Read(\"\/data\/incoming\").Include(\"*.zip\").MoveTo(\"\/data\/archive\"))    .ClaimCheck(_claims, ClaimCheckOperation.Set, \"${header.redbFile.NameOnly}\")    .To(\"direct:\/\/notify\")                      \/\/ \u0434\u0430\u043b\u044c\u0448\u0435 \u0435\u0434\u0435\u0442 \u043d\u043e\u043c\u0435\u0440\u043e\u043a, \u043d\u0435 \u0430\u0440\u0445\u0438\u0432    .ClaimCheck(_claims, ClaimCheckOperation.GetAndRemove, \"${header.redbFile.NameOnly}\")    .Process(UnpackAndImport);                  \/\/ \u0442\u0435\u043b\u043e \u0432\u0435\u0440\u043d\u0443\u043b\u043e\u0441\u044c, \u043d\u043e\u043c\u0435\u0440\u043e\u043a \u043f\u043e\u0433\u0430\u0448\u0435\u043d<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0438\u043f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0435\u043b\u0430 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u0445, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0433\u043e\u043b\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0431\u0430\u0439\u0442, \u0430 \u0442\u043e, \u0447\u0442\u043e \u0431\u044b\u043b\u043e. \u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u0438\u043c\u0435\u043d\u0435\u043c \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0438 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0439, \u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c: \u0442\u043e\u0433\u0434\u0430 \u0448\u0430\u0433\u0438 \u0431\u0435\u0440\u0443\u0442 \u043e\u0431\u0449\u0435\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430.<\/p>\n<p>\u0415\u0441\u0442\u044c \u0438 \u0441\u0442\u0435\u043a\u043e\u0432\u044b\u0439 \u0440\u0435\u0436\u0438\u043c\u00a0<code>Push<\/code>\u00a0\/\u00a0<code>Pop<\/code>\u00a0\u0431\u0435\u0437 \u043a\u043b\u044e\u0447\u0430: \u0443\u0431\u0440\u0430\u043b\u0438 \u0442\u0435\u043b\u043e \u043f\u0435\u0440\u0435\u0434 \u043e\u0431\u043e\u0433\u0430\u0449\u0435\u043d\u0438\u0435\u043c, \u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u043f\u043e\u0441\u043b\u0435, \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u0430. \u0423\u0434\u043e\u0431\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0441\u0440\u0435\u0434\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u043d\u0443\u0436\u0435\u043d \u0432\u044b\u0437\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0432\u0430\u0448\u0438 \u0434\u0432\u0435\u0441\u0442\u0438 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0448\u0430\u044e\u0442.<\/p>\n<h3>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0430\u043f\u043a\u0430, FTP \u0438 SFTP \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442<\/h3>\n<p>\u0417\u0434\u0435\u0441\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u0441\u0442\u0430\u0432\u043a\u0430 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430. \u041e\u043f\u0440\u043e\u0441, \u0444\u0438\u043b\u044c\u0442\u0440\u044b, \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430, \u0438\u0434\u0435\u043c\u043f\u043e\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c,\u00a0<code>doneFileName<\/code>, \u043f\u043e\u0441\u0442-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430, \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0438 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0432 \u043e\u0431\u0449\u0435\u0439 \u0431\u0430\u0437\u0435\u00a0<code>redb.Route.GenericFile<\/code>. \u041b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430, FTP \u0438 SFTP \u044d\u0442\u043e \u0442\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043f\u043e\u0432\u0435\u0440\u0445 \u043d\u0435\u0451.<\/p>\n<p>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043c\u044b\u0441\u043b \u043f\u0440\u044f\u043c\u043e\u0439. \u041a\u043e\u0433\u0434\u0430 \u043f\u0430\u0440\u0442\u043d\u0451\u0440 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u00ab\u043c\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043c\u043e\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0448\u0430\u0440\u0443, \u0437\u0430\u0431\u0438\u0440\u0430\u0439\u0442\u0435 \u0441 \u043d\u0430\u0448\u0435\u0433\u043e SFTP\u00bb, \u0432\u044b \u043c\u0435\u043d\u044f\u0435\u0442\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a, \u0430 \u043d\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0435 \u043b\u043e\u0433\u0438\u043a\u0443 \u043f\u0440\u0438\u0451\u043c\u0430:<\/p>\n<pre><code>\/\/ \u0431\u044b\u043b\u043eFrom(FileDsl.Read(\"\/mnt\/partner\/in\").Include(\"*.edi\").MoveTo(\"archive\"))\/\/ \u0441\u0442\u0430\u043b\u043eFrom(SftpDsl.Directory(\"\/upload\/in\")        .Host(\"sftp.partner.com\").Username(\"edi\").Password(\"{{sftp-pass}}\")        .Include(\"*.edi\").MoveTo(\"archive\"))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418\u043c\u0435\u043d\u0430 \u043e\u043f\u0446\u0438\u0439, \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u043f\u043e\u0441\u0442-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043a\u043e\u0434. \u041c\u0438\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430\u043c\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0437\u0430 \u043c\u0438\u043d\u0443\u0442\u0443, \u0430 \u043d\u0435 \u0437\u0430 \u0441\u043f\u0440\u0438\u043d\u0442.<\/p>\n<h3>\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u0438 \u0444\u0430\u0439\u043b\u0430<\/h3>\n<p>\u041a\u043e\u043d\u0441\u044e\u043c\u0435\u0440 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430 \u043e\u0431\u0449\u0435\u043c \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043e\u0432 redb.Route \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0435 graceful shutdown: \u043d\u0430\u00a0<code>Stop<\/code>\u00a0\u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043e\u043f\u0440\u043e\u0441 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430, \u0437\u0430\u0442\u0435\u043c \u0434\u0432\u0438\u0436\u043e\u043a \u0434\u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u043d\u0430\u0447\u0430\u0442\u044b\u0445 \u043e\u0431\u043c\u0435\u043d\u043e\u0432 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0433\u0430\u0441\u0438\u0442 \u043c\u0430\u0440\u0448\u0440\u0443\u0442. \u0424\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b\u043a\u0430\u0442\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0441\u044f \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435, \u043d\u0435 \u0431\u0440\u043e\u0441\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u0438 \u043d\u0435 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0432 \u043f\u043e\u0434\u0432\u0435\u0448\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043c\u0435\u0436\u0434\u0443\u00a0<code>PreMove<\/code>\u00a0\u0438 \u0430\u0440\u0445\u0438\u0432\u043e\u043c.<\/p>\n<p>\u0414\u043b\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u043c\u0435\u043d\u0430 \u044d\u0442\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u0435\u0435, \u0447\u0435\u043c \u0434\u043b\u044f \u0431\u0440\u043e\u043a\u0435\u0440\u043e\u0432: \u0443 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u043d\u0451\u0442\u0441\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0430 \u0443 \u0444\u0430\u0439\u043b\u0430 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0448\u0430\u043d\u0441\u0430 \u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0435 \u043d\u0435\u0442.<\/p>\n<h3>\u0413\u0440\u0430\u043d\u0438\u0446\u044b<\/h3>\n<p>\u0427\u0435\u0441\u0442\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440 \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u043d\u0435 \u0432\u044b\u044f\u0441\u043d\u044f\u043b\u0438 \u044d\u0442\u043e \u0432 \u043f\u0440\u043e\u0434\u0435.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0413\u0440\u0430\u043d\u0438\u0446\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041a\u0430\u043a \u0435\u0441\u0442\u044c<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u043f\u0440\u043e\u0441, \u0430 \u043d\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0424\u0421<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e\u00a0<code>FileSystemWatcher<\/code>. \u041e\u043f\u0440\u043e\u0441 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c, \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0448\u0430\u0440\u044b \u0438 \u043d\u0435 \u0442\u0435\u0440\u044f\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0431\u0443\u0444\u0435\u0440\u0430. \u0426\u0435\u043d\u0430: \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e\u00a0<code>delay<\/code>, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 500 \u043c\u0441<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0420\u0435\u0435\u0441\u0442\u0440 \u0438\u0434\u0435\u043c\u043f\u043e\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0440\u0435\u0441\u0442\u0430\u0440\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u00a0<code>Delete<\/code>\u00a0\u0438\u043b\u0438\u00a0<code>MoveTo<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0431\u0438\u0440\u0430\u044e\u0442 \u0444\u0430\u0439\u043b \u0438\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430. \u041e\u043d \u0436\u0435 \u043d\u0435 \u043e\u0431\u0449\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430\u043c\u0438: \u0440\u0430\u0437\u0432\u043e\u0434\u0438\u0442\u0435 \u0438\u0445\u00a0<code>preMove<\/code>\u00a0\u0438\u043b\u0438\u00a0<code>readLock<\/code>, \u0430 \u043d\u0435 \u043d\u0430\u0434\u0435\u0436\u0434\u043e\u0439 \u043d\u0430 \u043e\u0431\u0449\u0438\u0439 \u0440\u0435\u0435\u0441\u0442\u0440<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041a\u043b\u044e\u0447 \u0438\u0434\u0435\u043c\u043f\u043e\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0443\u0442\u044c, \u0432\u0440\u0435\u043c\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0440\u0430\u0437\u043c\u0435\u0440, \u043b\u0438\u0431\u043e \u0432\u0430\u0448 \u0448\u0430\u0431\u043b\u043e\u043d \u0441\u00a0<code>${file:name}<\/code>. \u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u043c \u0438 \u0442\u0435\u043b\u0443 \u0442\u0443\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b: \u043a\u043b\u044e\u0447 \u043d\u0443\u0436\u0435\u043d \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d, \u0438\u043d\u0430\u0447\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u0435\u0440\u044f\u0435\u0442 \u0441\u043c\u044b\u0441\u043b<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u043f\u0440\u043e\u0441\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0434\u0438\u043d \u043a\u043e\u043d\u0441\u044e\u043c\u0435\u0440 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 \u043f\u043e\u0440\u0446\u0438\u044e \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438. \u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0437\u043c \u043d\u0430\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0438\u0436\u0435 \u043f\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0443 \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430\u043c\u0438 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0435 \u043c\u0430\u0441\u043a\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438\u00a0<code>readLock<\/code>\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0424\u0421<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0423 FTP \u0438 SFTP \u043d\u0430 \u0438\u0445 \u043c\u0435\u0441\u0442\u0435\u00a0<code>doneFileName<\/code>,\u00a0<code>minAge<\/code>\u00a0\u0438\u00a0<code>preMove<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041a\u0430\u0442\u0430\u043b\u043e\u0433 \u043e\u043f\u0440\u043e\u0441\u0430 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u0430\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0415\u0441\u043b\u0438 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u043d\u0435\u0442, \u043e\u043f\u0440\u043e\u0441 \u043c\u043e\u043b\u0447\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0446\u0438\u043a\u043b. \u0410\u0432\u0442\u043e\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0435\u0441\u0442\u044c \u0443 \u043f\u0440\u043e\u0434\u044e\u0441\u0435\u0440\u0430 \u0447\u0435\u0440\u0435\u0437\u00a0<code>AutoCreate<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>\u041a\u0443\u0434\u0430 \u044d\u0442\u043e \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f<\/h3>\n<p>\u0426\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 \u043d\u0435 \u0432 \u0447\u0442\u0435\u043d\u0438\u0438 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430, \u044d\u0442\u043e\u00a0<code>Directory.GetFiles<\/code>. \u0426\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u00a0<code>From<\/code>\u00a0\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432\u0435\u0441\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 redb.Route: \u0441\u043f\u043b\u0438\u0442\u0442\u0435\u0440 \u0438 \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0440, \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c\u0443, \u0434\u0435\u0434\u0443\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f, \u0440\u0435\u0442\u0440\u0430\u0438, circuit breaker, \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438, \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u0430\u044f \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430. \u0422\u0438\u043f\u043e\u0432\u043e\u0439 \u043d\u043e\u0447\u043d\u043e\u0439 \u043f\u0440\u0438\u0451\u043c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code>From(FileDsl.Read(\"\/data\/incoming\")        .Include(\"orders_*.csv\")        .DoneFileName(\"${file:name}.done\")        .SortBy(\"Modified\")        .MaxMessagesPerPoll(500)        .PreMove(\"\/data\/processing\")        .MoveTo(\"\/data\/archive\"))    .Log(\"\u041f\u0430\u0447\u043a\u0430 ${header.redbFile.Name}\")    .Split(ex =&gt; ParseCsv(ex.In.Body))        .To(\"sql:INSERT INTO orders(...) VALUES(...)?dataSource=#pg\")    .End()    .To(\"kafka:\/\/orders-imported\");<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0430 \u043d\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0443 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u041f\u0440\u043e\u0434\u044e\u0441\u0435\u0440, \u043f\u043e\u043c\u0438\u043c\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 span OpenTelemetry \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c, \u0442\u0430\u043a \u0447\u0442\u043e \u00ab\u043a\u0443\u0434\u0430 \u0434\u0435\u043b\u0441\u044f \u0444\u0430\u0439\u043b\u00bb \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u0431\u044b\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u043a \u043b\u043e\u0433\u0430\u043c.<\/p>\n<p>\u0424\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u043e\u0431\u043c\u0435\u043d \u043d\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 \u043c\u043e\u0434\u043d\u044b\u043c. \u041d\u043e \u043e\u043d \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f, \u0438 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 \u00ab\u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f\u00bb \u0438 \u00ab\u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0430\u0434\u0451\u0436\u043d\u0430\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f\u00bb \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0440\u043e\u0432\u043d\u043e \u0442\u0435\u043c\u0438 \u0434\u0435\u0442\u0430\u043b\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u0432\u044b\u0448\u0435: \u0432\u043e\u0437\u0440\u0430\u0441\u0442 \u0444\u0430\u0439\u043b\u0430, \u043c\u0430\u0440\u043a\u0435\u0440, \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435, \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0438 \u043f\u043e\u0440\u0446\u0438\u044f. \u041f\u0440\u0438\u044f\u0442\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0438\u0445 \u0443\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438.<\/p>\n<p>\u041f\u0430\u043a\u0435\u0442:\u00a0<a href=\"https:\/\/www.nuget.org\/packages\/redb.Route.File\/\" rel=\"noopener noreferrer nofollow\">redb.Route.File \u043d\u0430 NuGet<\/a>; \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0438 \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a \u043f\u043e \u043e\u043f\u0446\u0438\u044f\u043c \u0432\u00a0<a href=\"https:\/\/github.com\/redbase-app\/redb-route\/tree\/main\/redb.Route.File\" rel=\"noopener noreferrer nofollow\">README \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430<\/a>. \u0424\u0430\u0439\u043b\u044b \u044d\u0442\u043e \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442 \u0432 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0435 redb.Route, \u0440\u044f\u0434\u043e\u043c \u0441 Kafka, RabbitMQ, SFTP, AS2 \u0438 \u043f\u0440\u043e\u0447\u0438\u043c\u0438: \u0442\u043e\u0442 \u0436\u0435\u00a0<code>From \u2192 \u2026 \u2192 To<\/code>, \u0442\u0435 \u0436\u0435 EIP, \u0442\u0430 \u0436\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u043e\u0441\u0442\u044c. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043b\u0438\u0448\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0430\u0440\u0442\u043d\u0451\u0440 \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0435\u043c\u0443 \u0443\u0434\u043e\u0431\u043d\u043e.<\/p>\n<p><strong><em>\u0415\u0441\u043b\u0438 \u0431\u044b\u043b\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e, \u2b50 \u043d\u0430\u00a0<\/em><\/strong><a href=\"https:\/\/github.com\/redbase-app\" rel=\"noopener noreferrer nofollow\"><strong><em>GitHub<\/em><\/strong><\/a><strong><em>\u00a0\u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0434\u0440\u0443\u0433\u0438\u043c \u044d\u0442\u043e \u043d\u0430\u0439\u0442\u0438.<\/em><\/strong><\/p>\n<p>\u0414\u0440\u0443\u0433\u0438\u0435 \u043c\u043e\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014\u00a0<a href=\"https:\/\/redb.ru\/articles\" rel=\"noopener noreferrer nofollow\">redb.ru\/articles<\/a>, \u0435\u0449\u0451 \u2014 \u043d\u0430\u00a0<a href=\"https:\/\/habr.com\/ru\/users\/grelikt\/articles\/\" rel=\"noopener noreferrer nofollow\">\u0425\u0430\u0431\u0440\u0435<\/a>.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1074544\/\">https:\/\/habr.com\/ru\/articles\/1074544\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>redb.Route.File\u041e\u043f\u0440\u043e\u0441 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430, \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0434\u043e\u043f\u0438\u0441\u0438 \u0444\u0430\u0439\u043b\u0430, \u0438\u0434\u0435\u043c\u043f\u043e\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u0438 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 temp+rename: \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u043e\u0431\u043c\u0435\u043d \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0448\u0430\u0433 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430.\u0421\u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u0443 \u043b\u044e\u0431\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0442\u043e\u0440\u0430, \u0447\u0435\u0440\u0435\u0437 \u0447\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0445\u043e\u0434\u044f\u0442 \u0434\u0435\u043d\u044c\u0433\u0438, \u0438 \u043e\u043d \u043d\u0430\u0437\u043e\u0432\u0451\u0442 \u0444\u0430\u0439\u043b\u044b. \u0411\u0430\u043d\u043a \u043a\u043b\u0430\u0434\u0451\u0442 \u0432\u044b\u043f\u0438\u0441\u043a\u0443 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u043d\u0430 \u0448\u0430\u0440\u0435. 1\u0421 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0437\u0430\u043a\u0430\u0437\u044b \u0432 XML \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e. \u041f\u0430\u0440\u0442\u043d\u0451\u0440 \u043f\u043e EDI \u0448\u043b\u0451\u0442\u00a0.edi\u00a0\u043d\u0430 FTP. \u0411\u0438\u043b\u043b\u0438\u043d\u0433 \u043d\u043e\u0447\u044c\u044e \u0440\u043e\u043d\u044f\u0435\u0442 CDR-\u0444\u0430\u0439\u043b\u044b \u043d\u0430 \u043f\u0430\u0440\u0443 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442. \u0420\u043e\u0437\u043d\u0438\u0447\u043d\u0430\u044f \u0441\u0435\u0442\u044c \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0435\u0442 \u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0432 CSV, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u0430\u043a \u0431\u044b\u043b\u043e \u0432 2009-\u043c \u0438 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u043c\u0435\u043d\u044f\u0442\u044c. \u0424\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u043e\u0431\u043c\u0435\u043d \u043d\u0435 \u00ab\u043b\u0435\u0433\u0430\u0441\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043a\u043e\u0440\u043e \u0443\u0439\u0434\u0451\u0442\u00bb, \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u043d\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e: \u043e\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u043e\u0449\u0435, \u0447\u0435\u043c \u0435\u0441\u0442\u044c.\u041f\u0440\u043e\u0449\u0435 \u043e\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u0437\u0430 \u0447\u0430\u0441.\u00a0Directory.GetFiles, \u0446\u0438\u043a\u043b,\u00a0File.ReadAllBytes, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438, \u0443\u0434\u0430\u043b\u0438\u043b\u0438. \u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0436\u0438\u0437\u043d\u044c. \u0424\u0430\u0439\u043b \u043f\u043e\u0434\u0445\u0432\u0430\u0442\u0438\u043b\u0438, \u043f\u043e\u043a\u0430 \u043f\u0430\u0440\u0442\u043d\u0451\u0440 \u0435\u0433\u043e \u0435\u0449\u0451 \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b, \u0438 \u0432 \u0431\u0430\u0437\u0443 \u0443\u0435\u0445\u0430\u043b\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0437\u0430\u043a\u0430\u0437\u043e\u0432. \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0443\u043f\u0430\u043b\u0430, \u0444\u0430\u0439\u043b \u0443\u0436\u0435 \u0443\u0434\u0430\u043b\u0451\u043d. \u0414\u0432\u0430 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043f\u043e\u0434\u043d\u044f\u043b\u0438 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0444\u0430\u0439\u043b \u0438 \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0434\u0443\u0431\u043b\u0438 \u043f\u043b\u0430\u0442\u0435\u0436\u0435\u0439. \u041a\u0442\u043e-\u0442\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u043b \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u00a0.tmp\u00a0\u043e\u0442 \u0430\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441\u0430.\u00a0FileSystemWatcher\u00a0\u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043d\u0430 SMB-\u0448\u0430\u0440\u0435. \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u043a\u0430\u0442\u0438\u043b\u0438 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0438 \u0444\u0430\u0439\u043b \u043d\u0430 800 \u041c\u0411 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u00ab\u0443\u0436\u0435 \u043d\u0435 \u0442\u0430\u043c, \u0435\u0449\u0451 \u043d\u0435 \u0442\u0443\u0442\u00bb. \u041a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u044d\u0442\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u0441\u0442\u044b\u043b\u0451\u043c, \u0438 \u0447\u0435\u0440\u0435\u0437 \u0433\u043e\u0434 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439 \u043d\u0435\u0434\u043e-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043d\u0430 2000 \u0441\u0442\u0440\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0445\u043e\u0447\u0435\u0442 \u0442\u0440\u043e\u0433\u0430\u0442\u044c.redb.Route.File\u00a0\u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0433\u043e\u0442\u043e\u0432\u044b\u043c \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043e\u043c. \u041a\u0430\u0442\u0430\u043b\u043e\u0433 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0435, \u0440\u043e\u0432\u043d\u043e \u043a\u0430\u043a \u043e\u0447\u0435\u0440\u0435\u0434\u044c Kafka \u0438\u043b\u0438 HTTP-\u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442: \u043e\u043f\u0440\u043e\u0441 \u0441 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u043c, \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435, \u043f\u043e\u043a\u0430 \u0444\u0430\u0439\u043b \u0434\u043e\u043f\u0438\u0441\u0430\u043d, \u0438\u0434\u0435\u043c\u043f\u043e\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c, \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u00ab\u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438\u00bb, \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b. \u0422\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 DSL, \u0442\u0435 \u0436\u0435 EIP-\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u043f\u043e\u0441\u043b\u0435\u00a0From, \u0442\u0430 \u0436\u0435 \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u044f. \u0414\u0430\u043b\u044c\u0448\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043f\u043e \u0448\u0430\u0433\u0430\u043c, \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u0432\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u0443 \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u043b\u0435\u0440\u0430.\u0424\u0430\u0439\u043b \u0437\u0430 \u043c\u0438\u043d\u0443\u0442\u0443services.AddRedbRoute(route =&gt;{    route.Services.AddRedbRouteFile();    route.AddRouteBuilder&lt;MyRoutes&gt;();});using redb.Route.File.Fluent;\/\/ \u0427\u0438\u0442\u0430\u0435\u043c \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 CSV \u0438 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0435 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044cFrom(FileDsl.Read(&#171;\/data\/incoming&#187;)        .Include(&#171;*.csv&#187;)        .MinAge(2000)        .SortBy(&#171;Modified&#187;)        .MoveTo(&#171;\/data\/processed&#187;))    .Log(&#171;\u0412\u0437\u044f\u043b\u0438 ${header.redbFile.Name}, ${header.redbFile.Length} \u0431\u0430\u0439\u0442&#187;)    .To(&#171;direct:\/\/parse&#187;);\/\/ \u041f\u0438\u0448\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430 \u0434\u0438\u0441\u043a \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043eFrom(&#171;direct:\/\/export&#187;)    .To(FileDsl.Write(&#171;\/data\/outgoing&#187;)        .FileName(&#171;${header.orderId}.json&#187;)        .TempPrefix(&#171;.tmp-&#171;));\u0412\u0441\u0451. \u041f\u0430\u043a\u0435\u0442 \u043d\u0435 \u0442\u044f\u043d\u0435\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439, \u0441\u0445\u0435\u043c\u0430\u00a0file\u00a0\u0434\u0430\u043b\u044c\u0448\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0438 \u0432\u043e \u0444\u043b\u044e\u0435\u043d\u0442\u043d\u043e\u043c \u0432\u0438\u0434\u0435, \u0438 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 URI.\u042d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u044d\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430 \u0438\u043b\u0438 \u0431\u0438\u043b\u0434\u0435\u0440\u041a\u0430\u0436\u0434\u044b\u0439 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0434\u0432\u0443\u043c\u044f \u0440\u0430\u0432\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438: \u0442\u0438\u043f\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c \u0431\u0438\u043b\u0434\u0435\u0440\u043e\u043c \u0432 \u043a\u043e\u0434\u0435 \u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u043c URI, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043b\u0430\u0434\u0451\u0442\u0441\u044f \u0432\u00a0appsettings.json\u00a0\u0438 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0438. \u041a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043e\u043d\u0438 \u0432 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435, \u0431\u0438\u043b\u0434\u0435\u0440 \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443.\/\/ \u0424\u043b\u044e\u0435\u043d\u0442\u043d\u043eFrom(FileDsl.Read(&#171;\/data\/incoming&#187;).Include(&#171;*.csv,*.xml&#187;).Recursive().Delete())\/\/ \u0421\u0442\u0440\u043e\u043a\u043e\u0439 (\u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e)From(&#171;file:\/\/\/data\/incoming?include=*.csv,*.xml&amp;recursive=true&amp;delete=true&#187;)\u041d\u0430 Windows \u043f\u0443\u0442\u044c \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u043a\u0430\u043a\u00a0file:\/\/\/C:\/data\/incoming, \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u0441\u043b\u044d\u0448 \u0441\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u042d\u0442\u043e \u043c\u0435\u043b\u043e\u0447\u044c, \u043d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u043d\u0435\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u043f\u043e\u0442\u044b\u043a\u0430\u044e\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433 \u043f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u0435\u0442 \u043c\u0435\u0436\u0434\u0443 \u043c\u0430\u0448\u0438\u043d\u0430\u043c\u0438.\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u043c\u0435\u043d\u0430: \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0435\u0449\u0451 \u043f\u0438\u0448\u0443\u0442\u041d\u0438 \u043e\u0434\u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0435 \u0434\u0430\u0451\u0442 \u0432\u0430\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u00ab\u0437\u0430\u043f\u0438\u0441\u044c \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u0430\u00bb. \u041f\u0430\u0440\u0442\u043d\u0451\u0440 \u043e\u0442\u043a\u0440\u044b\u043b \u043f\u043e\u0442\u043e\u043a, \u043b\u044c\u0451\u0442 300 \u041c\u0411 \u043f\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u043a\u0430\u043d\u0430\u043b\u0443, \u0430 \u0432\u0430\u0448 \u043f\u043e\u043b\u043b\u0435\u0440 \u0443\u0436\u0435 \u0443\u0432\u0438\u0434\u0435\u043b \u0438\u043c\u044f \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435. \u0414\u0430\u043b\u044c\u0448\u0435 \u0432\u043e\u043f\u0440\u043e\u0441 \u043d\u0435 \u00ab\u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043b\u0438\u00bb, \u0430 \u00ab\u043a\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u043e\u00bb. \u041a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440 \u0434\u0430\u0451\u0442 \u0448\u0435\u0441\u0442\u044c \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432, \u0438 \u0432 \u043f\u0440\u043e\u0434\u0435 \u043e\u0431\u044b\u0447\u043d\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u044e\u0442 \u0434\u0432\u0430.\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u043e\u0437\u0440\u0430\u0441\u0442.\u00a0\u0421\u0430\u043c\u043e\u0435 \u0434\u0435\u0448\u0451\u0432\u043e\u0435: \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0442\u044c \u0444\u0430\u0439\u043b, \u043f\u043e\u043a\u0430 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435 \u043f\u0440\u043e\u0448\u043b\u043e N \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434.FileDsl.Read(&#171;\/data\/incoming&#187;).MinAge(5000)\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430.\u00a0\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f\u00a0Changed\u00a0\u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0438 \u0432\u0440\u0435\u043c\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0438 \u043e\u0442\u0434\u0430\u0451\u0442 \u0444\u0430\u0439\u043b, \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0440\u0430\u0441\u0442\u0438 \u043d\u0430 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. \u042d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0432\u044b\u0433\u0440\u0443\u0437\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0438\u0448\u0443\u0442\u0441\u044f \u043c\u0438\u043d\u0443\u0442\u0430\u043c\u0438.FileDsl.Read(&#171;\/data\/incoming&#187;)    .ReadLock(&#171;Changed&#187;)    .ReadLockCheckInterval(1000)   \/\/ \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u0441\u043c\u043e\u0442\u0440\u0438\u043c    .ReadLockMinAge(5000)          \/\/ \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b\u043c    .ReadLockTimeout(120000)       \/\/ \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0436\u0434\u0451\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\u041c\u0430\u0440\u043a\u0435\u0440\u043d\u044b\u0439 \u0444\u0430\u0439\u043b.\u00a0\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f\u00a0MarkerFile\u00a0\u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0440\u044f\u0434\u043e\u043c\u00a0\u0438\u043c\u044f.redbLock\u00a0\u0447\u0435\u0440\u0435\u0437\u00a0FileMode.CreateNew, \u0442\u043e \u0435\u0441\u0442\u044c \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u041e\u0421. \u0412\u0442\u043e\u0440\u043e\u0439 \u0438\u043d\u0441\u0442\u0430\u043d\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0432\u0438\u0434\u0438\u0442 \u043c\u0430\u0440\u043a\u0435\u0440, \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442. \u042d\u0442\u043e \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u00ab\u0434\u0432\u0430 \u043f\u043e\u0434\u0430 \u0447\u0438\u0442\u0430\u044e\u0442 \u043e\u0434\u043d\u0443 \u0448\u0430\u0440\u0443\u00bb: \u0433\u043e\u043d\u043a\u0443 \u0432\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u0438\u043d, \u043f\u0440\u043e\u0438\u0433\u0440\u0430\u0432\u0448\u0438\u0439 \u0434\u0430\u0436\u0435 \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0444\u0430\u0439\u043b.FileDsl.Read(&#171;\/mnt\/share\/in&#187;).ReadLock(&#171;MarkerFile&#187;)\u042d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u044b\u0439 \u0437\u0430\u0445\u0432\u0430\u0442.\u00a0\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f\u00a0FileLock\u00a0\u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0444\u0430\u0439\u043b \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u043e \u0438 \u0434\u0435\u0440\u0436\u0438\u0442 \u0445\u0435\u043d\u0434\u043b \u0432\u0441\u0451 \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u041f\u043e\u043a\u0430 \u043e\u043d \u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f, \u043d\u0438\u043a\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0430\u0439\u043b \u043d\u0435 \u043e\u0442\u043a\u0440\u043e\u0435\u0442 \u043d\u0438 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435, \u043d\u0438 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c. \u0422\u043e\u043d\u043a\u043e\u0441\u0442\u044c, \u0440\u0430\u0434\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044d\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c: \u0445\u0435\u043d\u0434\u043b \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0441 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u0442-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u0432\u043e\u0435\u0433\u043e \u0436\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442 \u0444\u0430\u0439\u043b, \u043d\u0435 \u0434\u043e\u0436\u0438\u0434\u0430\u044f\u0441\u044c \u0441\u043d\u044f\u0442\u0438\u044f \u043b\u043e\u043a\u0430, \u0430 \u0442\u0435\u043b\u043e \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0443\u0436\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0445\u0435\u043d\u0434\u043b, \u0430 \u043d\u0435 \u0432\u0442\u043e\u0440\u044b\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435\u043c.FileDsl.Read(&#171;\/data\/incoming&#187;).ReadLock(&#171;FileLock&#187;)\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435.\u00a0\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f\u00a0Rename\u00a0\u0443\u0432\u043e\u0434\u0438\u0442 \u0444\u0430\u0439\u043b \u043f\u043e\u0434 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u043e\u0435 \u0438\u043c\u044f \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043d\u0438\u043c \u0442\u0430\u043c. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c, \u0437\u043d\u0430\u0447\u0438\u0442 \u0444\u0430\u0439\u043b \u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u0442\u043e-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0439, \u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0435\u0433\u043e \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0435\u0442. \u041f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442: \u043f\u043e\u043a\u0430 \u0444\u0430\u0439\u043b \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435, \u0435\u0433\u043e \u043d\u0435\u0442 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u043f\u043e\u0434 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c, \u0442\u0430\u043a \u0447\u0442\u043e \u0447\u0443\u0436\u043e\u0439 \u043f\u043e\u043b\u043b\u0435\u0440 \u043f\u043e \u043c\u0430\u0441\u043a\u0435 \u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0443\u0432\u0438\u0434\u0438\u0442.FileDsl.Read(&#171;\/data\/incoming&#187;).ReadLock(&#171;Rename&#187;)\u0424\u0430\u0439\u043b-\u0441\u0438\u0433\u043d\u0430\u043b \u043e\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f.\u00a0\u041a\u043b\u0430\u0441\u0441\u0438\u043a\u0430 EDI: \u043f\u0430\u0440\u0442\u043d\u0451\u0440 \u043a\u043b\u0430\u0434\u0451\u0442\u00a0order.csv, \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c \u043a\u043b\u0430\u0434\u0451\u0442 \u043f\u0443\u0441\u0442\u043e\u0439\u00a0order.csv.done. \u041f\u043e\u043a\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0435\u0442, \u0444\u0430\u0439\u043b\u0430 \u0434\u043b\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.FileDsl.Read(&#171;\/data\/incoming&#187;).DoneFileName(&#171;${file:name}.done&#187;)\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438\u00a0${file:name}\u00a0\u0438\u00a0${file:name.noext}, \u0442\u0430\u043a \u0447\u0442\u043e \u0441\u0445\u0435\u043c\u0430\u00a0order.csv\u00a0\u043f\u043b\u044e\u0441\u00a0order.done\u00a0\u0442\u043e\u0436\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f. \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0444\u0430\u0439\u043b-\u0441\u0438\u0433\u043d\u0430\u043b \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c.\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e: \u043a\u043e\u043d\u0441\u044e\u043c\u0435\u0440 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441\u00a0.redb_, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u0451, \u0447\u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e\u00a0tempPrefix. \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0434\u044e\u0441\u0435\u0440, \u043f\u0438\u0448\u0443\u0449\u0438\u0439 \u0432 \u0442\u043e\u0442 \u0436\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0447\u0435\u0440\u0435\u0437 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u043d\u0435 \u0443\u0441\u0442\u0440\u043e\u0438\u0442 \u0441\u0430\u043c \u0441\u0435\u0431\u0435 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b. \u042d\u0442\u043e \u0442\u0430 \u043c\u0435\u043b\u043e\u0447\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432 \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u043e\u043c \u043f\u043e\u043b\u043b\u0435\u0440\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u044e\u0442 \u043d\u0430 \u0442\u0440\u0435\u0442\u0438\u0439 \u0434\u0435\u043d\u044c.\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u0444\u0430\u0439\u043b\u043e\u043c \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u043d\u0430 \u043d\u0430 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442, \u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0437\u0430\u0434\u0430\u0442\u044c \u0434\u0432\u0435 \u0441\u0440\u0430\u0437\u0443 \u043f\u0430\u0434\u0430\u0435\u0442 \u043d\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435, \u0430 \u043d\u0435 \u043c\u043e\u043b\u0447\u0430 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435.\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u041a\u043e\u0433\u0434\u0430 \u0431\u0440\u0430\u0442\u044cNoop()\u0424\u0430\u0439\u043b \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435\u041a\u0430\u0442\u0430\u043b\u043e\u0433 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0438\u0442\u0430\u0435\u043c, \u043f\u0440\u0430\u0432\u0430 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0431\u044b\u0442\u044cDelete()\u0424\u0430\u0439\u043b \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0445\u0430\u0412\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u00ab\u043c\u0443\u0441\u043e\u0440\u043a\u0430\u00bb, \u0433\u0434\u0435 \u0432\u0430\u0436\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u043a\u0442 \u043f\u0440\u0438\u0451\u043c\u0430MoveTo(dir)\u0424\u0430\u0439\u043b \u043f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u0435\u0442 \u0432 \u0430\u0440\u0445\u0438\u0432\u041f\u0440\u043e\u0434\u0430\u043a\u0448\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: \u0432\u0441\u0435\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u044a\u044f\u0432\u0438\u0442\u044cPreMove(dir)\u0424\u0430\u0439\u043b \u043f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u0435\u0442 \u0414\u041e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438\u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0435\u0439 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435PreMove\u00a0\u0437\u0430\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u0431\u044b\u0447\u043d\u043e \u0440\u0435\u0448\u0430\u044e\u0442 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e. \u0424\u0430\u0439\u043b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0432 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u043e\u0434\u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f. \u041f\u0435\u0440\u0435\u043d\u043e\u0441 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0430\u0442\u043e\u043c\u0430\u0440\u0435\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0442\u043e\u0440\u043e\u0439 \u0438\u043d\u0441\u0442\u0430\u043d\u0441 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0451\u0442 \u0444\u0430\u0439\u043b \u0438 \u043f\u043e\u0439\u0434\u0451\u0442 \u0434\u0430\u043b\u044c\u0448\u0435. \u041f\u043b\u044e\u0441 \u0432\u044b \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0438\u0434\u0438\u0442\u0435 \u043f\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435.FileDsl.Read(&#171;\/data\/incoming&#187;)    .PreMove(&#171;\/data\/processing&#187;)    .MoveTo(&#171;\/data\/archive&#187;)\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e \u043d\u0435\u0443\u0434\u0430\u0447\u0443. \u0415\u0441\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0443\u043f\u0430\u043b\u0430 \u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u043c, \u043f\u043e\u0441\u0442-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f: \u0444\u0430\u0439\u043b \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0440\u043e\u0432\u043d\u043e \u0442\u0430\u043c, \u0433\u0434\u0435 \u0431\u044b\u043b, \u0438 \u043f\u043e\u043f\u0430\u0434\u0451\u0442 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043e\u043f\u0440\u043e\u0441. \u042d\u0442\u043e \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u00ab\u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0441\u043c\u043e\u0433\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c\u00bb \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0445\u0443\u0434\u0448\u0438\u043c \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432. \u041e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u0431\u0438\u0442\u044b\u0439 \u0444\u0430\u0439\u043b \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043d\u043e\u0432\u0430 \u0438 \u0441\u043d\u043e\u0432\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0435 \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438\u00a0OnException\u00a0\u043d\u0435 \u043e\u043f\u0446\u0438\u044f, \u0430 \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438:OnException(typeof(FormatException))    .Handled(true)    .To(FileDsl.Write(&#171;\/data\/quarantine&#187;));\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043e\u0431\u043c\u0435\u043d \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u0444\u0430\u0439\u043b \u0443\u0435\u0437\u0436\u0430\u0435\u0442 \u0432 \u043a\u0430\u0440\u0430\u043d\u0442\u0438\u043d \u043a\u043e\u043f\u0438\u0435\u0439, \u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0448\u0442\u0430\u0442\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0435\u0439.\u0421\u044e\u0434\u0430 \u0436\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0441\u043b\u0443\u0447\u0430\u0439, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u0434\u0443\u043c\u0430\u044e\u0442 \u0437\u0430\u0440\u0430\u043d\u0435\u0435: \u0444\u0430\u0439\u043b \u043d\u0430\u0448\u0451\u043b\u0441\u044f \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435, \u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c. \u041a\u0442\u043e-\u0442\u043e \u0434\u0435\u0440\u0436\u0438\u0442 \u0435\u0433\u043e \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u043e, \u043f\u0440\u0430\u0432\u0430 \u043d\u0435 \u0442\u0435, \u0442\u043e\u043c \u043e\u0442\u0432\u0430\u043b\u0438\u043b\u0441\u044f. \u042d\u0442\u043e \u0442\u043e\u0436\u0435 \u043e\u0442\u043a\u0430\u0437 \u043f\u043e \u0444\u0430\u0439\u043b\u0443, \u0430 \u043d\u0435 \u043f\u0443\u0441\u0442\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435: \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u043d\u043e\u043b\u044c \u0431\u0430\u0439\u0442 \u043f\u043e\u0434 \u0432\u0438\u0434\u043e\u043c \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0444\u0430\u0439\u043b \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435, \u0438 \u0435\u0433\u043e \u0432\u043e\u0437\u044c\u043c\u0443\u0442 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043e\u043f\u0440\u043e\u0441\u0435. \u0417\u0432\u0443\u0447\u0438\u0442 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e \u0440\u043e\u0432\u043d\u043e \u0434\u043e \u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0433\u0434\u0430 \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u0439 \u043f\u043e\u043b\u043b\u0435\u0440 \u043e\u0442\u0434\u0430\u0451\u0442 \u0432\u0430\u043c \u043f\u0443\u0441\u0442\u043e\u0439\u00a0byte[], \u0430 \u0438\u043c\u043f\u043e\u0440\u0442 \u0447\u0435\u0441\u0442\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432 \u0431\u0430\u0437\u0443 \u043d\u043e\u043b\u044c \u0437\u0430\u043a\u0430\u0437\u043e\u0432.\u0418\u0434\u0435\u043c\u043f\u043e\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0444\u043b\u0430\u0433\u043e\u043c. \u041a\u043b\u044e\u0447 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438, \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434 \u0442\u0435\u043c \u0436\u0435 \u0438\u043c\u0435\u043d\u0435\u043c \u0444\u0430\u0439\u043b \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u043c, \u0430 \u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u0444\u0430\u0439\u043b \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u043d\u0435 \u043f\u043e\u0435\u0434\u0435\u0442.FileDsl.Read(&#171;\/data\/incoming&#187;).Noop().Idempotent()\u0421\u0432\u044f\u0437\u043a\u0430\u00a0Noop() + Idempotent()\u00a0\u0434\u0430\u0451\u0442 \u0440\u0435\u0436\u0438\u043c \u00ab\u0447\u0438\u0442\u0430\u0435\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u043d\u0438\u0447\u0435\u0433\u043e \u0432 \u043d\u0451\u043c \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u043c, \u043a\u0430\u0436\u0434\u044b\u0439 \u0444\u0430\u0439\u043b \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437\u00bb. \u042d\u0442\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u043c, \u043a\u0443\u0434\u0430 \u0443 \u0432\u0430\u0441 \u043d\u0435\u0442 \u043f\u0440\u0430\u0432 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c, \u0438 \u043e\u043d \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u0447\u0430\u0441\u0442\u044b\u0439 \u043f\u0440\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 \u0447\u0443\u0436\u043e\u0439 \u0448\u0430\u0440\u043e\u0439.\u0420\u0435\u0435\u0441\u0442\u0440 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 \u0436\u0438\u0432\u0451\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0438 \u044d\u0442\u043e \u043d\u0430\u0434\u043e \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0433\u043e\u043b\u043e\u0432\u0435: \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0430 \u043e\u043d \u043f\u0443\u0441\u0442. \u0412 \u0441\u0432\u044f\u0437\u043a\u0435 \u0441\u00a0Delete\u00a0\u0438\u043b\u0438\u00a0MoveTo\u00a0\u044d\u0442\u043e \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u0443\u0436\u0435 \u043d\u0435\u0442. \u0412 \u0441\u0432\u044f\u0437\u043a\u0435 \u0441\u00a0Noop\u00a0\u0440\u0435\u0441\u0442\u0430\u0440\u0442 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443, \u0438 \u0437\u0430\u0449\u0438\u0442\u0443 \u043e\u0442 \u0434\u0443\u0431\u043b\u0435\u0439 \u0432 \u044d\u0442\u043e\u043c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u043d\u0443\u0436\u043d\u043e \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0438\u0436\u0435 \u043f\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0443.\u041e\u0442\u0431\u043e\u0440: \u0447\u0442\u043e \u0431\u0435\u0440\u0451\u043c \u0438 \u0432 \u043a\u0430\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u043c \u043e\u0431\u043c\u0435\u043d\u0435 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u043d\u0430\u0447\u0438\u043c. \u041d\u043e\u0447\u043d\u0430\u044f \u043f\u0430\u0447\u043a\u0430 \u0438\u0437 4000 \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044e\u0442 \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0434\u0430\u0451\u0442 \u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0441\u043a\u043b\u0430\u0434\u0430, \u0440\u0430\u0437\u044a\u0435\u0437\u0436\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e.FileDsl.Read(&#171;\/data\/incoming&#187;)    .Include(&#171;*.csv,*.xml&#187;)      \/\/ \u043c\u0430\u0441\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e, * \u0438 ?    .Exclude(&#171;*.tmp,~*&#187;)    .SortBy(&#171;Modified&#187;)          \/\/ Name, NameDesc, Modified, ModifiedDesc, Size, SizeDesc    .MaxMessagesPerPoll(200)     \/\/ \u043f\u043e\u0440\u0446\u0438\u044f \u0437\u0430 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0445\u043e\u0434    .Recursive()    .Delay(1000)                 \/\/ \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043e\u043f\u0440\u043e\u0441\u0430, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 500 \u043c\u0441MaxMessagesPerPoll\u00a0\u0432 \u043f\u0430\u0440\u0435 \u0441 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u044d\u0442\u043e \u0432\u0430\u0448 \u0440\u0435\u0433\u0443\u043b\u044f\u0442\u043e\u0440 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u041f\u0440\u0438\u0448\u043b\u043e 40 000 \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u0441\u0443\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u044f \u043f\u0430\u0440\u0442\u043d\u0451\u0440\u0430, \u0430 \u0432\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442\u0435 \u0438\u0445 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u043c\u0438 \u043f\u043e\u0440\u0446\u0438\u044f\u043c\u0438 \u043e\u0442 \u0441\u0442\u0430\u0440\u044b\u0445 \u043a \u043d\u043e\u0432\u044b\u043c, \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u0430 40 000 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0443\u0440\u043e\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441.\u041c\u0430\u0441\u043a\u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0431\u0435\u0437 \u0443\u0447\u0451\u0442\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, \u0447\u0442\u043e \u043d\u0430 Linux \u0441\u043f\u0430\u0441\u0430\u0435\u0442 \u043e\u0442 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u00ab\u043f\u0440\u0438\u0441\u043b\u0430\u043b\u0438\u00a0ORDERS.CSV, \u0430 \u043c\u0430\u0441\u043a\u0430\u00a0*.csv\u00bb.\u0417\u0430\u043f\u0438\u0441\u044c: temp \u043f\u043b\u044e\u0441 rename, \u0430 \u043d\u0435 \u00ab\u043a\u0430\u043a&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-492218","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/492218","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=492218"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/492218\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=492218"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=492218"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=492218"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}