{"id":501672,"date":"2026-11-05T02:54:31","date_gmt":"2026-11-04T23:54:31","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=501672"},"modified":"2026-11-05T02:54:31","modified_gmt":"2026-11-04T23:54:31","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=501672","title":{"rendered":"redb Route XML \u0434\u043b\u044f VS Code: \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0438\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432, \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0430, \u0433\u0440\u0430\u0444 \u0438 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b Mermaid"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/55\/e7\/ab\/55e7ab67ab781347c6113f4fed52c727.png\" alt=\"redb.route VSCode\" title=\"redb.route VSCode\" width=\"1200\" height=\"630\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/55\/e7\/ab\/55e7ab67ab781347c6113f4fed52c727.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/55\/e7\/ab\/55e7ab67ab781347c6113f4fed52c727.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>redb.route VSCode<\/figcaption><\/div>\n<\/figure>\n<p>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f VS Code \u0432 Marketplace: \u043f\u0440\u043e\u0435\u043a\u0442 \u0438\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u0430, \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u043f\u043e \u0441\u0445\u0435\u043c\u0435, \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0431\u0438\u043d\u044b, \u0434\u0435\u0440\u0435\u0432\u043e \u0438 \u0433\u0440\u0430\u0444 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432, Mermaid, \u043f\u0443\u0442\u044c \u0434\u043e \u0432\u043e\u0440\u043a\u0435\u0440\u0430 Tsak.  <\/p>\n<p>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0432 redb.Route \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 C#, \u0430 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u043e\u0439: \u0444\u0430\u0439\u043b\u00a0<code>.route.xml<\/code>\u00a0\u043a\u043b\u0430\u0434\u0451\u0442\u0441\u044f \u0432 \u043f\u0430\u043a\u0435\u0442, \u043f\u0430\u043a\u0435\u0442 \u0432 \u043f\u0430\u043f\u043a\u0443 \u0432\u043e\u0440\u043a\u0435\u0440\u0430 Tsak, \u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0424\u043e\u0440\u043c\u0430\u0442\u0443 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d, \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0439 XML, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u0433\u0440\u0443\u0437\u0438\u0442 \u043a\u0430\u043a \u0435\u0441\u0442\u044c. \u041d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0433\u043e \u0440\u0443\u043a\u0430\u043c\u0438 \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e: \u043a\u0430\u043a\u0438\u0435 \u0443 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 \u043e\u043f\u0446\u0438\u0438, \u043a\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0431\u0438\u043d \u0441\u043e\u0441\u043b\u0430\u0442\u044c\u0441\u044f, \u043a\u0443\u0434\u0430 \u043f\u043e\u0439\u0434\u0451\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u043d\u0438 \u043e\u0434\u043d\u0430 \u0432\u0435\u0442\u043a\u0430 \u043d\u0435 \u043f\u043e\u0434\u043e\u0448\u043b\u0430.<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u00a0<strong>redb Route XML<\/strong>\u00a0\u0434\u043b\u044f VS Code. \u0421 \u043a\u043e\u043d\u0446\u0430 \u043e\u043a\u0442\u044f\u0431\u0440\u044f \u043e\u043d\u043e \u0432 Visual Studio Marketplace, \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f 0.2.25. \u041d\u0438\u0436\u0435 \u0432\u0435\u0441\u044c \u043f\u0443\u0442\u044c \u0441 \u043d\u0438\u043c: \u043e\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 \u043f\u0430\u043f\u043a\u0438 \u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443, \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0438 \u0433\u0440\u0430\u0444 \u0434\u043e \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u043b\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438 \u043c\u043e\u0434\u0443\u043b\u044f \u043d\u0430 \u0432\u043e\u0440\u043a\u0435\u0440\u0435.<\/p>\n<h3>\u0427\u0442\u043e \u044d\u0442\u043e \u0434\u0430\u0451\u0442<\/h3>\n<ul>\n<li>\n<p><strong>\u0421\u0442\u0430\u0440\u0442 \u0437\u0430 \u043c\u0438\u043d\u0443\u0442\u0443.<\/strong>\u00a0\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0441 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430\u043c\u0438, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0438 \u0441\u0442\u0435\u043d\u0434\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0431\u0435\u0437 \u0437\u043d\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u00a0<code>dotnet new<\/code>\u00a0\u0438 \u0431\u0435\u0437 \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0438\u0434\u043d\u0430, \u043f\u043e\u043a\u0430 \u0432\u044b \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442\u0435.<\/strong>\u00a0\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u043e\u043f\u0446\u0438\u044f \u043d\u0435 \u0442\u043e\u0433\u043e \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 \u0438\u043b\u0438 \u043d\u0435 \u0442\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430 \u043f\u043e\u0434\u0447\u0451\u0440\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443, \u0430 \u043d\u0435 \u0432 \u043b\u043e\u0433\u0435 \u0432\u043e\u0440\u043a\u0435\u0440\u0430 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043a\u043b\u0430\u0434\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u043f\u0446\u0438\u0438 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c.<\/strong>\u00a0\u0423 \u043e\u0434\u043d\u043e\u0439 Kafka \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u043e\u0440\u043e\u043a\u0430 \u043e\u043f\u0446\u0438\u0439; \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0438\u0445 \u0441 \u0442\u0438\u043f\u0430\u043c\u0438 \u0438 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u0438 \u044d\u0442\u043e \u0440\u043e\u0432\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0442 \u0441\u0435\u0440\u0432\u0438\u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0440\u0435\u043b\u0438\u0437\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u0430\u0440\u0448\u0440\u0443\u0442 \u043f\u043e\u043d\u044f\u0442\u0435\u043d \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u0432\u0442\u043e\u0440\u0443.<\/strong>\u00a0\u0413\u0440\u0430\u0444 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438, \u0432\u0435\u0442\u043a\u0438 \u0438 \u043f\u0443\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435 \u043f\u043e\u0434\u043e\u0448\u043b\u043e \u043d\u0438 \u043f\u043e\u0434 \u043e\u0434\u043d\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435. \u0421 \u043d\u0438\u043c \u043f\u0440\u043e\u0449\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u043e\u0442\u043e\u043a \u0441 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u043e\u043c, \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u043c \u0438\u043b\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439, \u0447\u0435\u043c \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u0443.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0440\u0430\u0432\u043a\u0438 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u044b\u043c\u0438 \u0432 git.<\/strong>\u00a0\u0413\u0440\u0430\u0444 \u043c\u0435\u043d\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u0436\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0432 \u0442\u0435\u043a\u0441\u0442\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435, \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u043e\u0435 \u043c\u044b\u0448\u044c\u044e, \u043d\u0430 \u0440\u0435\u0432\u044c\u044e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 diff.<\/p>\n<\/li>\n<li>\n<p><strong>\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043d\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441 \u043a\u043e\u0434\u043e\u043c.<\/strong>\u00a0\u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 Mermaid \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0438\u0437 \u0442\u043e\u0433\u043e \u0436\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0432\u043e\u0440\u043a\u0435\u0440\u0435, \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439.<\/p>\n<\/li>\n<li>\n<p><strong>\u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442.<\/strong>\u00a0\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434 Apache 2.0, \u0430 \u0441\u0445\u0435\u043c\u0430, \u0434\u0435\u0440\u0435\u0432\u043e \u0438 \u0433\u0440\u0430\u0444 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0431\u0435\u0437 \u0441\u0435\u0442\u0438.<\/p>\n<\/li>\n<\/ul>\n<h3>\u0427\u0442\u043e \u0443\u043c\u0435\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435<\/h3>\n<ul>\n<li>\n<p><strong>New Project:<\/strong>\u00a0\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 redb \u0438 \u0441\u0430\u043c\u0430 \u0441\u0442\u0430\u0432\u0438\u0442 \u043f\u0430\u043a\u0435\u0442\u044b \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u0445\u0435\u043c\u0430:<\/strong>\u00a0\u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0438 \u043e\u043f\u0446\u0438\u0439 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043b\u0435\u0442\u0443.<\/p>\n<\/li>\n<li>\n<p><strong>\u0417\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0438:<\/strong>\u00a0\u043c\u0430\u0440\u0448\u0440\u0443\u0442, \u0432\u044b\u0431\u043e\u0440 \u0438 \u0431\u043b\u043e\u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u043e\u0434\u043d\u043e\u0439 \u0432\u0441\u0442\u0430\u0432\u043a\u043e\u0439.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0431\u0438\u043d\u044b:<\/strong>\u00a0\u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u043e\u00a0<code>#<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>\u0414\u0435\u0440\u0435\u0432\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432:<\/strong>\u00a0\u0432\u0441\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0441 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443.<\/p>\n<\/li>\n<li>\n<p><strong>\u0413\u0440\u0430\u0444:<\/strong>\u00a0\u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u043a\u0430\u043a \u0441\u0445\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u043c\u044b\u0448\u044c\u044e \u0438 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p><strong>Mermaid:<\/strong>\u00a0\u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u0434\u043b\u044f README \u0438 \u0432\u0438\u043a\u0438.<\/p>\n<\/li>\n<\/ul>\n<h3>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430<\/h3>\n<p>\u0412 \u043f\u0430\u043d\u0435\u043b\u0438\u00a0<strong>Extensions<\/strong>\u00a0\u043d\u0430\u0439\u0434\u0438\u0442\u0435\u00a0<code>redb Route XML<\/code>\u00a0\u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435\u00a0<strong>Install<\/strong>, \u0438\u043b\u0438 \u0438\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430:<\/p>\n<pre><code class=\"bash\">code --install-extension redb.redb-route-xml<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/15\/c5\/6b\/15c56bd13f1dfff94b00452e93489ea3.png\" alt=\"redb Route XML \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439\" width=\"1133\" height=\"180\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/15\/c5\/6b\/15c56bd13f1dfff94b00452e93489ea3.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/15\/c5\/6b\/15c56bd13f1dfff94b00452e93489ea3.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>redb Route XML \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0438\u043c VS Code \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u00a0<a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=redhat.vscode-xml\" rel=\"noopener nofollow\">Red Hat XML<\/a>: \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043f\u043e \u0441\u0445\u0435\u043c\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043e\u043d, \u0430 \u043d\u0430\u0448\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u043e\u0442\u0434\u0430\u0451\u0442 \u0435\u043c\u0443 \u0441\u0445\u0435\u043c\u0443. \u041d\u0443\u0436\u0435\u043d VS Code 1.85 \u0438\u043b\u0438 \u043d\u043e\u0432\u0435\u0435.<\/p>\n<p>\u0414\u043b\u044f \u043c\u0430\u0448\u0438\u043d\u044b \u0431\u0435\u0437 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a Marketplace, \u0434\u043b\u044f VSCodium \u0438 Cursor \u0442\u043e\u0442 \u0436\u0435 \u0444\u0430\u0439\u043b\u00a0<code>redb-route-xml-0.2.25.vsix<\/code>\u00a0\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d \u043a \u0440\u0435\u043b\u0438\u0437\u0430\u043c\u00a0<a href=\"https:\/\/github.com\/redbase-app\/redb-route\/releases\" rel=\"noopener nofollow\">redb-route \u043d\u0430 GitHub<\/a>:\u00a0<strong>Extensions<\/strong>, \u043c\u0435\u043d\u044e\u00a0<code>...<\/code>,\u00a0<strong>Install from VSIX<\/strong>. \u0411\u0435\u0437 \u0441\u0435\u0442\u0438 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0442\u0430\u043a \u0436\u0435 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f\u00a0<code>.vsix<\/code>\u00a0\u043e\u0442 Red Hat XML.<\/p>\n<h3>\u041d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0431\u0435\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438<\/h3>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u0430\u00a0<strong>redb: New Project<\/strong>\u00a0\u0438\u0437 \u043f\u0430\u043b\u0438\u0442\u0440\u044b \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 redb \u0447\u0435\u0440\u0435\u0437\u00a0<code>dotnet new<\/code>. \u0412\u0432\u0435\u0440\u0445\u0443 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0435: SDK .NET \u0438 \u0434\u0432\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432,\u00a0<code>redb.Templates<\/code>\u00a0\u0438\u00a0<code>redb.Tsak.Templates<\/code>. \u0415\u0441\u043b\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 \u043d\u0435\u0442, \u0440\u044f\u0434\u043e\u043c \u043a\u043d\u043e\u043f\u043a\u0430\u00a0<strong>Install<\/strong>:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/4f\/c2\/f4\/4fc2f41928cb7d82d2a1225d044d43a5.png\" alt=\"\u041f\u0430\u043a\u0435\u0442\u044b \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b\" width=\"1468\" height=\"412\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/4f\/c2\/f4\/4fc2f41928cb7d82d2a1225d044d43a5.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/4f\/c2\/f4\/4fc2f41928cb7d82d2a1225d044d43a5.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u0430\u043a\u0435\u0442\u044b \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043d\u0430 <a href=\"http:\/\/nuget.org\" rel=\"noopener nofollow\">nuget.org<\/a> \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u0430, \u043a\u043d\u043e\u043f\u043a\u0430 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u00a0<strong>Update<\/strong>.<\/p>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u044d\u0442\u043e \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430, \u0438 \u0438\u0445 \u0437\u0434\u0435\u0441\u044c \u0442\u0440\u0438 \u0433\u0440\u0443\u043f\u043f\u044b.<\/p>\n<p><strong>\u041c\u043e\u0434\u0443\u043b\u0438 XML-\u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432<\/strong>, \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432\u00a0<code>redb-route-*<\/code>. \u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043c\u043e\u0434\u0443\u043b\u044c Tsak \u0441 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430\u043c\u0438 \u0432 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0435 \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u043d\u0430 C# \u0440\u044f\u0434\u043e\u043c, \u0432\u00a0<code>routes\/*.cs<\/code>: \u0443\u0434\u043e\u0431\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0434\u0432\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430. \u0421\u0440\u0435\u0434\u0438 \u043d\u0438\u0445 \u0444\u0430\u0439\u043b\u044b (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0430\u043f\u043a\u0430, FTP, SFTP), REST API, SQL-outbox \u0438 \u043f\u0430\u043a\u0435\u0442\u043d\u0430\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0430, \u043e\u0431\u044a\u0435\u043a\u0442\u044b redb, Kafka, RabbitMQ, AMQP 1.0, MQTT, S3, LDAP, \u043f\u043e\u0447\u0442\u0430, AS2 \u0438 AS4, \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435 Quartz, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 XSD \u0438 XSLT, scatter-gather \u0438 \u043d\u0430\u0431\u043e\u0440 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0431\u0435\u0437 \u0431\u0440\u043e\u043a\u0435\u0440\u0430.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/39\/7c\/18\/397c18d9f7560db2daeef0cb802911c2.png\" alt=\"\u041a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0438 \u0444\u043e\u0440\u043c\u0430\" width=\"1470\" height=\"1079\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/39\/7c\/18\/397c18d9f7560db2daeef0cb802911c2.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/39\/7c\/18\/397c18d9f7560db2daeef0cb802911c2.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0438 \u0444\u043e\u0440\u043c\u0430<\/figcaption><\/div>\n<\/figure>\n<p><strong>\u0425\u043e\u0441\u0442\u044b Tsak<\/strong>: \u0432\u043e\u0440\u043a\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u043e\u0434\u0443\u043b\u0438 \u0438\u0437 \u0441\u0432\u043e\u0435\u0439 \u043f\u0430\u043f\u043a\u0438, \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0438\u0445 \u043d\u0430 \u043b\u0435\u0442\u0443, \u0434\u0430\u0451\u0442 API \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a.<\/p>\n<p><strong>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/strong>\u00a0\u043d\u0430 redb: \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0435, \u0441\u0430\u0439\u0442\u044b \u043d\u0430 Blazor \u0438 Razor Pages, Blazor WebAssembly \u0441 REST API \u043d\u0430 redb.Route, Blazor BFF, \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0432\u043e\u0440\u043a\u0435\u0440, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 redb.Identity, \u0447\u0430\u0442 \u0441 LLM.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/14\/2c\/dd\/142cddf1f729cde0a2c0d05170bba15e.png\" alt=\"\u0428\u0430\u0431\u043b\u043e\u043d\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439\" width=\"1018\" height=\"632\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/14\/2c\/dd\/142cddf1f729cde0a2c0d05170bba15e.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/14\/2c\/dd\/142cddf1f729cde0a2c0d05170bba15e.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0428\u0430\u0431\u043b\u043e\u043d\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u043f\u0440\u0430\u0432\u0430 \u0444\u043e\u0440\u043c\u0430 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430: \u0438\u043c\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0446\u0435\u043b\u0435\u0432\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430, \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u043f\u0430\u043f\u043a\u0430. \u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0435 \u043d\u0435\u0442 SDK, \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u0430, \u0430 \u043f\u0430\u043f\u043a\u0443, \u0433\u0434\u0435 \u0443\u0436\u0435 \u043b\u0435\u0436\u0430\u0442 \u0444\u0430\u0439\u043b\u044b, \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u0442.<\/p>\n<p><strong>Create<\/strong>\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u00a0<code>dotnet new<\/code>, \u0430 \u0435\u0441\u043b\u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0435\u0441\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0435\u0449\u0451 \u0438\u00a0<code>dotnet tool restore<\/code>. \u0412\u044b\u0432\u043e\u0434 \u0438\u0434\u0451\u0442 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0438 \u0432 \u043a\u0430\u043d\u0430\u043b\u00a0<strong>redb Route<\/strong>, \u0448\u0430\u0433 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c. \u0412 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 \u044d\u0442\u043e\u043c \u043e\u043a\u043d\u0435, \u0432 \u043d\u043e\u0432\u043e\u043c \u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c.<\/p>\n<p>\u041a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0438 \u0444\u043e\u0440\u043c\u0430 \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u0438\u0437 \u0441\u0430\u043c\u0438\u0445 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432. \u041d\u043e\u0432\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u0432 \u043f\u0430\u043a\u0435\u0442\u0430\u0445 redb \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0431\u0435\u0437 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f.<\/p>\n<h3>\u041f\u0440\u043e\u0435\u043a\u0442 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432<\/h3>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0434\u0451\u0442 \u043d\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u0435\u00a0<strong>redb.Route XML module: files<\/strong>\u00a0(<code>redb-route-file<\/code>). \u0415\u043c\u0443 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u043d\u0438 \u043e\u0434\u0438\u043d \u0441\u0435\u0440\u0432\u0435\u0440: \u043f\u0430\u043f\u043a\u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 XSD, \u043f\u0430\u043f\u043a\u0438 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0438 \u0441\u0431\u043e\u0439\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u0432\u0438\u0442\u0430\u043d\u0446\u0438\u044f \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0444\u0430\u0439\u043b. \u0418\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u044d\u0442\u043e \u0442\u0430 \u0436\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u0447\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430:<\/p>\n<pre><code class=\"bash\">dotnet new install redb.Templatesdotnet new redb-route-file -n Orders<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code>Orders\/  .config\/dotnet-tools.json        \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 redb-route-xml  context.xml                      \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430: \u0431\u0438\u043d\u044b, C#-\u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b  routes\/files.route.xml           \u0434\u0432\u0430 XML-\u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430  routes\/CsvFilesRoute.cs          \u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u0438\u0451\u043c \u0434\u043b\u044f CSV \u043d\u0430 C#  resources\/order.xsd              \u0441\u0445\u0435\u043c\u0430 \u0437\u0430\u043a\u0430\u0437\u0430  config\/orders.config.json        \u0438\u043c\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0438 \u0430\u0432\u0442\u043e\u0437\u0430\u043f\u0443\u0441\u043a, \u0435\u0434\u0435\u0442 \u0432 \u043f\u0430\u043a\u0435\u0442\u0435  config\/context.sample.json       \u043e\u0431\u0440\u0430\u0437\u0435\u0446 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0434\u043b\u044f \u0432\u044b\u043a\u043b\u0430\u0434\u043a\u0438  deploy\/docker-compose.files.yml  \u043c\u043e\u0434\u0443\u043b\u044c \u043d\u0430 \u0432\u043e\u0440\u043a\u0435\u0440\u0435 Tsak<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0420\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u044d\u0442\u043e \u0441\u043e\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0430. \u041c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u043b\u0435\u0436\u0430\u0442 \u0432\u00a0<code>routes\/<\/code>, \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d\u0438 \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u0438\u043c\u0435\u043d\u0438, \u0432\u00a0<code>resources\/<\/code>.\u00a0<code>context.xml<\/code>\u00a0\u0433\u0440\u0443\u0437\u0438\u0442\u0441\u044f \u0440\u0430\u043d\u044c\u0448\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u0432\u0438\u0434\u044f\u0442 \u0435\u0433\u043e \u0431\u0438\u043d\u044b. \u0412 \u043f\u0430\u043a\u0435\u0442\u0435 \u0435\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044f,\u00a0<code>orders.config.json<\/code>, \u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u043e\u0440\u043a\u0435\u0440\u0430: \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043f\u0430\u043a\u0435\u0442 \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u0435\u043d\u0434 \u0438 \u0432 \u043f\u0440\u043e\u0434 \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0438.<\/p>\n<h3>\u0420\u0430\u0437\u043c\u0435\u0442\u043a\u0430 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435<\/h3>\n<p>\u0412\u043e\u0442 \u0432\u0442\u043e\u0440\u043e\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0438\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u0430, \u0442\u043e\u0442, \u0447\u0442\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0444\u0430\u0439\u043b\u044b:<\/p>\n<pre><code class=\"xml\">&lt;routes xmlns=\"urn:redb:route:1.0\"&gt;  &lt;route id=\"orders-files-in\" description=\"Processes the files of the inbox\"&gt;    &lt;from uri=\"file:\/\/{{files.inbox:inbox}}?antInclude=*.xml&amp;amp;delay=5000&amp;amp;moveTo=done&amp;amp;moveFailed=error\"\/&gt;    &lt;convertBody type=\"System.String\"\/&gt;    &lt;validateXsd file=\"resources\/order.xsd\" throwOnFailure=\"true\"\/&gt;    &lt;log level=\"Information\" showRouteId=\"true\"&gt;      &lt;message&gt;processed ${header.redbFile.NameOnly}: ${body}&lt;\/message&gt;    &lt;\/log&gt;    &lt;setBody expr=\"received ${header.redbFile.NameOnly}\"\/&gt;    &lt;to uri=\"file:\/\/{{files.outbox:outbox}}?fileName=${header.redbFile.NameOnly}.receipt\"\/&gt;  &lt;\/route&gt;&lt;\/routes&gt;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u044f\u0442\u044c \u0432\u0435\u0449\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0445\u0432\u0430\u0442\u0430\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u0447\u0438\u0442\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442:<\/p>\n<ul>\n<li>\n<p><code><strong>&lt;from&gt;<\/strong><\/code><strong>\u00a0\u0438\u00a0<\/strong><code><strong>&lt;to&gt;<\/strong><\/code>\u00a0\u044d\u0442\u043e \u0432\u0445\u043e\u0434 \u0438 \u0432\u044b\u0445\u043e\u0434. URI \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u043a\u0430\u043a \u0432 C#-\u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430\u0445: \u0441\u0445\u0435\u043c\u0430 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430, \u043f\u0443\u0442\u044c, \u043e\u043f\u0446\u0438\u0438. \u0414\u043b\u0438\u043d\u043d\u044b\u0439 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440\u00a0<code>&lt;to&gt;&lt;sql dataSource=\"#main-db\"&gt;<\/code>\u00a0\u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432\u043d\u0443\u0442\u0440\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u0428\u0430\u0433\u0438 \u0438\u0434\u0443\u0442 \u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437:<\/strong>\u00a0\u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0442\u0435\u043b\u043e \u043a \u0441\u0442\u0440\u043e\u043a\u0435, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u043e XSD, \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043b\u043e\u0433, \u043f\u043e\u0434\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u0435\u043b\u043e, \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u0432\u0438\u0442\u0430\u043d\u0446\u0438\u044e. \u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043d\u0435 \u043f\u0440\u043e\u0448\u0451\u043b \u0441\u0445\u0435\u043c\u0443, \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0443\u0432\u043e\u0434\u0438\u0442 \u0435\u0433\u043e \u0432\u00a0<code>error\/<\/code>\u00a0\u043f\u043e \u043e\u043f\u0446\u0438\u0438\u00a0<code>moveFailed<\/code>.<\/p>\n<\/li>\n<li>\n<p><code><strong>{{files.inbox:inbox}}<\/strong><\/code>\u00a0\u044d\u0442\u043e \u043f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u041e\u043d \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u043e\u0440\u043a\u0435\u0440\u0430. \u041a\u043b\u044e\u0447 \u0431\u0435\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 \u043f\u0430\u043a\u0435\u0442\u0430 \u043a\u0430\u043a \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439.<\/p>\n<\/li>\n<li>\n<p><code><strong>${header...}<\/strong><\/code><strong>\u00a0\u0438\u00a0<\/strong><code><strong>expr<\/strong><\/code>\u00a0\u044d\u0442\u043e \u044f\u0437\u044b\u043a \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u0442\u043e\u0442 \u0436\u0435, \u0447\u0442\u043e \u0443 C#-\u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432. \u0412 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u0441\u0442\u0440\u043e\u043a\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u043e\u043c, \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>\u0412\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a<\/strong>\u00a0\u043f\u0438\u0448\u0443\u0442\u0441\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438:\u00a0<code>&lt;choice&gt;<\/code>\u00a0\u0441\u00a0<code>&lt;when expr=\"...\"&gt;<\/code>\u00a0\u0438\u00a0<code>&lt;otherwise&gt;<\/code>,\u00a0<code>&lt;tryCatch&gt;<\/code>\u00a0\u0441\u00a0<code>&lt;try&gt;<\/code>,\u00a0<code>&lt;catch&gt;<\/code>\u00a0\u0438\u00a0<code>&lt;finally&gt;<\/code>,\u00a0<code>&lt;transaction&gt;<\/code>\u00a0\u0432\u043e\u043a\u0440\u0443\u0433 \u0448\u0430\u0433\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u043c\u0438\u0442\u044f\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435. \u041f\u0435\u0440\u0432\u044b\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0448\u0430\u0431\u043b\u043e\u043d\u0430, \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u0430\u043a \u0440\u0430\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u00a0<code>&lt;choice&gt;<\/code>: \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u044f\u0442\u044b\u0439 \u0444\u0430\u0439\u043b \u043e\u043d \u043d\u0430\u0440\u043e\u0447\u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0435 XML.<\/p>\n<\/li>\n<\/ul>\n<p>\u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443 \u0432 \u0442\u0435 \u0436\u0435 \u0432\u044b\u0437\u043e\u0432\u044b DSL, \u0447\u0442\u043e \u043f\u0438\u0448\u0443\u0442\u0441\u044f \u043d\u0430 C#, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0451, \u0447\u0442\u043e \u0443\u043c\u0435\u0435\u0442 \u0434\u0432\u0438\u0436\u043e\u043a, \u0443\u043c\u0435\u0435\u0442 \u0438 XML: \u0440\u0435\u0442\u0440\u0430\u0438, \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438, \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u043c\u0435\u0442\u0440\u0438\u043a\u0438, \u043c\u043e\u043a\u0438 \u0432 \u0442\u0435\u0441\u0442\u0430\u0445. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0444\u043e\u0440\u043c\u0430\u0442, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u0438 \u0437\u0430\u043c\u0435\u043d\u0430 \u043c\u043e\u0434\u0443\u043b\u044f \u043d\u0430 \u043b\u0435\u0442\u0443 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u044b \u0432 \u0441\u0442\u0430\u0442\u044c\u0435\u00a0<a href=\"https:\/\/redb.ru\/articles\/route-xml-markup\" rel=\"noopener nofollow\">\u00abXML-\u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u0432 redb.Route\u00bb<\/a>.<\/p>\n<h3>\u041f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u043f\u043e \u0441\u0445\u0435\u043c\u0435<\/h3>\n<p>\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0451\u043d\u00a0<code>urn:redb:route:1.0<\/code>. \u041f\u043e \u043d\u0435\u043c\u0443 Red Hat XML \u0431\u0435\u0440\u0451\u0442 \u0441\u0445\u0435\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0435\u0441\u0451\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435, \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043b\u0435\u0442\u0443. \u041f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u0438\u0434\u0451\u0442 \u043f\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0443 \u0438\u043c\u0451\u043d, \u0430 \u043d\u0435 \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u0444\u0430\u0439\u043b\u0430: \u0447\u0443\u0436\u043e\u0439\u00a0<code>route.xml<\/code>\u00a0\u0431\u0435\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0451\u043d \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0435\u0442.<\/p>\n<p>\u0421\u0445\u0435\u043c\u0430 \u0437\u043d\u0430\u0435\u0442 \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u043f\u0446\u0438\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430. \u041d\u0430\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430\u00a0<code>&lt;to&gt;&lt;kafka<\/code>\u00a0\u0438 \u043f\u0440\u043e\u0431\u0435\u043b, \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u00a0<code>topic<\/code>,\u00a0<code>brokers<\/code>,\u00a0<code>key<\/code>,\u00a0<code>acks<\/code>,\u00a0<code>compressionType<\/code>\u00a0\u0438 \u0435\u0449\u0451 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u043e\u043f\u0446\u0438\u0439 Kafka \u0441 \u0438\u0445 \u0442\u0438\u043f\u0430\u043c\u0438 \u0438 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<p>\u0421\u0445\u0435\u043c\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0435\u0442 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430. \u041e\u043f\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044c, \u0432\u043d\u0443\u0442\u0440\u0438\u00a0<code>&lt;from&gt;<\/code>\u00a0\u043f\u043e\u0434\u0447\u0451\u0440\u043a\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0448\u0438\u0431\u043a\u0430: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,\u00a0<code>addressQuery<\/code>\u00a0\u0443 AS4 \u0434\u0430\u0441\u0442 \u00abThe &#8216;addressQuery&#8217; attribute is not allowed\u00bb. \u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0438\u0434\u043d\u0430 \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435, \u0434\u043e \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430.<\/p>\n<p>\u0412\u00a0<code>context.xml<\/code>\u00a0\u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0442\u0435 \u0436\u0435: \u0432\u043d\u0443\u0442\u0440\u0438\u00a0<code>&lt;context&gt;<\/code>\u00a0\u043f\u043e\u0441\u043b\u0435\u00a0<code>&lt;<\/code>\u00a0\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u00a0<code>bean<\/code>,\u00a0<code>components<\/code>,\u00a0<code>dataFormat<\/code>,\u00a0<code>deadLetterChannel<\/code>,\u00a0<code>onInit<\/code>,\u00a0<code>redb<\/code>,\u00a0<code>routeBuilder<\/code>,\u00a0<code>routeConfiguration<\/code>.<\/p>\n<p>\u0421\u0445\u0435\u043c\u0443 \u043d\u0435 \u043f\u0438\u0448\u0443\u0442 \u0440\u0443\u043a\u0430\u043c\u0438. \u0415\u0451 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u00a0<code>redb-route-xml<\/code>\u00a0\u0438\u0437 \u0441\u0431\u043e\u0440\u043e\u043a \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0440\u0435\u043b\u0438\u0437\u0435 redb.Route, \u0438 \u0440\u0435\u043b\u0438\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u0441\u0445\u0435\u043c\u0430 \u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0435\u0433\u043e \u0441\u0431\u043e\u0440\u043a\u0430\u043c\u0438. \u041d\u043e\u0432\u0430\u044f \u043e\u043f\u0446\u0438\u044f \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f.<\/p>\n<h3>\u0417\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0438<\/h3>\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0441\u0445\u0435\u043c\u0430 \u043d\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0436\u0435\u0442 \u0446\u0435\u043b\u0438\u043a\u043e\u043c: \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0431\u0435\u0437\u00a0<code>from<\/code>\u00a0\u0438\u043b\u0438\u00a0<code>choice<\/code>\u00a0\u0431\u0435\u0437 \u0432\u0435\u0442\u043e\u043a \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b. \u0414\u043b\u044f \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u0430\u043c, \u0433\u0434\u0435 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041d\u0430\u0431\u0440\u0430\u0442\u044c<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>&lt;route<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0441 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0435\u043c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>&lt;choice<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0432\u044b\u0431\u043e\u0440 \u0441 \u0432\u0435\u0442\u043a\u043e\u0439\u00a0<code>when<\/code>\u00a0\u0438\u00a0<code>otherwise<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>&lt;tryCatch<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0431\u043b\u043e\u043a\u00a0<code>try<\/code>\u00a0\u0441\u00a0<code>catch<\/code>\u00a0\u0438\u00a0<code>finally<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u043e\u043d\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0445 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 redb \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430: \u043d\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 \u0438 \u043d\u0435 \u0432 \u0447\u0443\u0436\u043e\u043c XML.<\/p>\n<h3>\u0421\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0431\u0438\u043d\u044b<\/h3>\n<p>\u041e\u0431\u044a\u0435\u043a\u0442\u044b \u0440\u0435\u0435\u0441\u0442\u0440\u0430, \u0444\u0430\u0431\u0440\u0438\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438, \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c\u00a0<code>&lt;bean name=\"...\"&gt;<\/code>, \u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0438\u0445 \u0447\u0435\u0440\u0435\u0437\u00a0<code>#<\/code>. \u041d\u0430\u0431\u0435\u0440\u0438\u0442\u0435\u00a0<code>#<\/code>, \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u0438\u043c\u0435\u043d\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0431\u0438\u043d\u043e\u0432. \u041f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0442\u0440\u0451\u0445 \u043c\u0435\u0441\u0442\u0430\u0445: \u0432\u043e \u0432\u0441\u0451\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 (<code>dataSource=\"#\"<\/code>), \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0441\u0445\u0435\u043c\u044b URI (<code>bean:#<\/code>) \u0438 \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u043e\u043f\u0446\u0438\u0438 URI (<code>?headerFilterStrategy=#<\/code>). \u0420\u0435\u0448\u0451\u0442\u043a\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 SQL\u00a0<code>:#login<\/code>, \u0441\u0441\u044b\u043b\u043a\u043e\u0439 \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0438 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442.<\/p>\n<pre><code class=\"xml\">&lt;routes xmlns=\"urn:redb:route:1.0\"&gt;  &lt;bean name=\"main-db\" type=\"redb.Route.Sql.Connection.SqlConnectionFactory, redb.Route.Sql\"&gt;    &lt;constructorArg&gt;      &lt;bean type=\"redb.Route.Sql.Connection.SqlConnectionOptions, redb.Route.Sql\"&gt;        &lt;property key=\"ConnectionString\" value=\"{{db.main.connection}}\"\/&gt;      &lt;\/bean&gt;    &lt;\/constructorArg&gt;  &lt;\/bean&gt;  &lt;route id=\"audit\"&gt;    &lt;from uri=\"direct:\/\/audit\"\/&gt;    &lt;to&gt;      &lt;sql dataSource=\"#main-db\"&gt;  &lt;!-- \u0437\u0434\u0435\u0441\u044c # \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 main-db --&gt;        &lt;![CDATA[ INSERT INTO audit_log(at) VALUES (CURRENT_TIMESTAMP) ]]&gt;      &lt;\/sql&gt;    &lt;\/to&gt;  &lt;\/route&gt;&lt;\/routes&gt;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0413\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 0.2.25: \u043e\u043d\u0430 \u0432\u0438\u0434\u0438\u0442 \u0431\u0438\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0438 \u043d\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u0442 \u0438\u0445 \u043f\u043e \u0442\u0438\u043f\u0443. \u0428\u0430\u0431\u043b\u043e\u043d\u044b redb \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u044e\u0442 \u0431\u0438\u043d\u044b \u0432\u00a0<code>context.xml<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0444\u0430\u0439\u043b\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u0438\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u00a0<code>#<\/code>\u00a0\u043f\u043e\u043a\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442. \u041d\u0435\u0432\u0435\u0440\u043d\u0443\u044e \u0438\u043b\u0438 \u0432\u0438\u0441\u044f\u0447\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043b\u043e\u0432\u044f\u0442\u00a0<code>redb-route-xml check<\/code>\u00a0\u0438\u00a0<code>pack<\/code>: \u0442\u0438\u043f \u0431\u0438\u043d\u0430, \u0435\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u044b \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u043f\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c \u0441\u0431\u043e\u0440\u043a\u0430\u043c.<\/p>\n<h3>\u0414\u0435\u0440\u0435\u0432\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432<\/h3>\n<p>\u041a\u043d\u043e\u043f\u043a\u0430\u00a0<strong>redb<\/strong>\u00a0\u0432 \u043f\u0430\u043d\u0435\u043b\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u0438\u0434\u00a0<strong>Routes<\/strong>: \u0432\u0441\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 (<code>*.route.xml<\/code>,\u00a0<code>*.redb-route.xml<\/code>), \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u0435\u0433\u043e\u00a0<code>id<\/code>\u00a0\u0438 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u00a0<code>from<\/code>. \u0429\u0435\u043b\u0447\u043e\u043a \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0444\u0430\u0439\u043b \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430. \u0414\u0435\u0440\u0435\u0432\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438, \u043f\u0440\u0430\u0432\u043a\u0435 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u043e\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043f\u0430\u043f\u043a\u0438 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438. \u0415\u0441\u043b\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u043d\u0435\u0442, \u0432\u0438\u0434 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/5e\/a5\/70\/5ea5707b7726eb4a049eca9116db391c.png\" alt=\"\u0414\u0435\u0440\u0435\u0432\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u0438 \u0442\u0435\u043a\u0441\u0442 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430\" width=\"1470\" height=\"1079\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/5e\/a5\/70\/5ea5707b7726eb4a049eca9116db391c.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/5e\/a5\/70\/5ea5707b7726eb4a049eca9116db391c.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0414\u0435\u0440\u0435\u0432\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u0438 \u0442\u0435\u043a\u0441\u0442 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430 \u0441\u043d\u0438\u043c\u043a\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441\u0435\u0440\u0438\u0439\u043d\u044b\u0445 \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u0438\u0437 \u0434\u0435\u043c\u043e SerialNumbers.Xml: \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 XSD \u0432\u00a0<code>tryCatch<\/code>, \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438, \u0434\u0432\u0430 \u0432\u044b\u0431\u043e\u0440\u0430. \u0422\u0435\u043a\u0441\u0442\u043e\u043c \u043e\u043d \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u043d\u043e \u0433\u0434\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0438 \u043a\u0443\u0434\u0430 \u0443\u0445\u043e\u0434\u0438\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0432\u0435\u0442\u043a\u0438, \u043b\u0443\u0447\u0448\u0435 \u0432\u0438\u0434\u043d\u043e \u0432 \u0433\u0440\u0430\u0444\u0435.<\/p>\n<h3>\u0413\u0440\u0430\u0444 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430<\/h3>\n<p>\u041a\u043d\u043e\u043f\u043a\u0430 \u0433\u0440\u0430\u0444\u0430 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430,\u00a0<strong>Open With<\/strong>\u00a0\u0438\u00a0<strong>redb Route Graph<\/strong>\u00a0\u0438\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u00a0<strong>redb Route: Open Route Graph<\/strong>\u00a0\u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0442 \u0442\u043e\u0442 \u0436\u0435 \u0444\u0430\u0439\u043b \u043a\u0430\u043a \u0433\u0440\u0430\u0444. \u0413\u0440\u0430\u0444 \u044d\u0442\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0438\u0434 \u0442\u043e\u0433\u043e \u0436\u0435 \u0442\u0435\u043a\u0441\u0442\u0430: \u043a\u0430\u0436\u0434\u0430\u044f \u043f\u0440\u0430\u0432\u043a\u0430 \u0432 \u043d\u0451\u043c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u043a\u043e\u0439 XML \u0438 \u043e\u0442\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u00a0<code>Ctrl+Z<\/code>. \u0424\u0430\u0439\u043b \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f, \u043a\u0430\u0436\u0434\u0430\u044f \u043f\u0440\u0430\u0432\u043a\u0430 \u044d\u0442\u043e \u0442\u043e\u0447\u0435\u0447\u043d\u0430\u044f \u0437\u0430\u043c\u0435\u043d\u0430: \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438, \u043e\u0442\u0441\u0442\u0443\u043f\u044b \u0438 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0432 \u043d\u0435\u0442\u0440\u043e\u043d\u0443\u0442\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u0435 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0442\u0430\u043a\u0438\u043c\u0438, \u043a\u0430\u043a\u0438\u043c\u0438 \u0438\u0445 \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0430\u0432\u0442\u043e\u0440, \u0430 \u043d\u043e\u0432\u044b\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0438\u0437 \u043f\u0430\u043d\u0435\u043b\u0438 \u0432\u0441\u0442\u0430\u0451\u0442 \u0432 \u043a\u043e\u043d\u0435\u0446 \u0442\u0435\u0433\u0430. \u0428\u0430\u0433 \u043f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u0435\u0442 \u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f \u043f\u0440\u044f\u043c\u043e \u043d\u0430\u0434 \u043d\u0438\u043c (\u043f\u0443\u0441\u0442\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043e\u0431\u0440\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u0443 \u0441\u0432\u044f\u0437\u044c, \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043f\u043e\u0434 \u0448\u0430\u0433\u043e\u043c \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435) \u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0442\u0441\u0442\u0443\u043f \u0441\u0432\u043e\u0435\u0433\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430. \u0422\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/ce\/00\/37\/ce0037bc0afdce1006c00417a92a4441.png\" alt=\"\u041c\u0430\u0440\u0448\u0440\u0443\u0442 \u0441\u0435\u0440\u0438\u0439\u043d\u044b\u0445 \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u043a\u0430\u043a \u0433\u0440\u0430\u0444\" width=\"1472\" height=\"1079\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/ce\/00\/37\/ce0037bc0afdce1006c00417a92a4441.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/ce\/00\/37\/ce0037bc0afdce1006c00417a92a4441.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041c\u0430\u0440\u0448\u0440\u0443\u0442 \u0441\u0435\u0440\u0438\u0439\u043d\u044b\u0445 \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u043a\u0430\u043a \u0433\u0440\u0430\u0444<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u0430\u043a \u0447\u0438\u0442\u0430\u0442\u044c \u0433\u0440\u0430\u0444:<\/p>\n<ul>\n<li>\n<p><strong>\u041f\u043b\u0438\u0442\u043a\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430<\/strong>\u00a0\u0441\u043e \u0437\u043d\u0430\u0447\u043a\u0430\u043c\u0438 \u0432 \u043d\u043e\u0442\u0430\u0446\u0438\u0438 Enterprise Integration Patterns \u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u044c\u044e:\u00a0<code>from<\/code>,\u00a0<code>bean<\/code>,\u00a0<code>sql<\/code>,\u00a0<code>choice<\/code>,\u00a0<code>loop<\/code>,\u00a0<code>log<\/code>. \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0448\u0430\u0433 (\u0438\u043c\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u0443\u0441\u043b\u043e\u0432\u0438\u0435, SQL), \u0432\u0438\u0434\u043d\u043e \u0432 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0435 \u0438 \u0432 \u043f\u0430\u043d\u0435\u043b\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432.<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0431\u0451\u0440\u0442\u043a\u0438 \u043d\u0430 \u043b\u0438\u043d\u0438\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430.<\/strong>\u00a0<code>transaction<\/code>,\u00a0<code>loop<\/code>,\u00a0<code>split<\/code>,\u00a0<code>metered<\/code>\u00a0\u0441\u0442\u0430\u0432\u044f\u0442 \u0441\u0432\u043e\u0438 \u0448\u0430\u0433\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043f\u043b\u0438\u0442\u043a\u043e\u0439 \u0438 \u043f\u043b\u0438\u0442\u043a\u043e\u0439\u00a0<code>end<\/code>;\u00a0<code>choice<\/code>,\u00a0<code>tryCatch<\/code>\u00a0\u0438\u00a0<code>filter<\/code>\u00a0\u0440\u0430\u0441\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432\u0435\u0442\u043a\u0430\u043c\u0438. \u041f\u043e\u0434\u0440\u044f\u0434 \u0438\u0434\u0443\u0449\u0438\u0435\u00a0<code>setHeader<\/code>\u00a0\u0438\u00a0<code>setProperty<\/code>\u00a0\u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u0443 \u043f\u043b\u0438\u0442\u043a\u0443\u00a0<code>set \u00d7N<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0443\u0442\u0438 \u043f\u043e \u0441\u043c\u044b\u0441\u043b\u0443.<\/strong>\u00a0\u0423\u0441\u043b\u043e\u0432\u043d\u044b\u0435 \u043f\u0443\u0442\u0438 \u043f\u0443\u043d\u043a\u0442\u0438\u0440\u043e\u043c: \u043e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439 \u0442\u0430\u043c, \u0433\u0434\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043c\u0438\u043c\u043e \u0448\u0430\u0433\u0430 (\u0444\u0438\u043b\u044c\u0442\u0440 \u043d\u0435 \u043f\u0440\u043e\u0439\u0434\u0435\u043d, \u043d\u0438 \u043e\u0434\u043d\u0430 \u0432\u0435\u0442\u043a\u0430 \u043d\u0435 \u043f\u043e\u0434\u043e\u0448\u043b\u0430, \u0434\u0443\u0431\u043b\u044c), \u0441\u0435\u0440\u044b\u0439 \u0441 \u043a\u0440\u0435\u0441\u0442\u043e\u043c \u0442\u0430\u043c, \u0433\u0434\u0435 \u043e\u043d\u043e \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f (<code>sample<\/code>,\u00a0<code>debounce<\/code>), \u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0442\u0430\u043c, \u0433\u0434\u0435 \u0448\u0430\u0433 \u0431\u0440\u043e\u0441\u0430\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u041d\u0430 \u0441\u043d\u0438\u043c\u043a\u0435 \u043e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439 \u043f\u0443\u0442\u044c \u00abno match\u00bb \u043e\u0431\u0445\u043e\u0434\u0438\u0442 \u043e\u0431\u0435 \u0432\u0435\u0442\u043a\u0438\u00a0<code>choice<\/code>\u00a0\u0432\u043d\u0443\u0442\u0440\u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u0426\u0432\u0435\u0442\u0430 \u043f\u043e \u0440\u043e\u043b\u0438.<\/strong>\u00a0\u0417\u0435\u043b\u0451\u043d\u044b\u0439 \u0432\u0445\u043e\u0434, \u0441\u0438\u043d\u0438\u0439 \u0432\u044b\u0445\u043e\u0434, \u0444\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u044b\u0439 \u0432\u0430\u0448 \u043a\u043e\u0434 (<code>bean<\/code>), \u043e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u0431\u0438\u0440\u044e\u0437\u043e\u0432\u044b\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f, \u0441\u0435\u0440\u044b\u0439 \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435, \u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u043e\u0448\u0438\u0431\u043a\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c:<\/p>\n<ul>\n<li>\n<p><strong>\u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u043f\u043e \u043f\u043e\u043b\u043e\u0447\u043a\u0430\u043c.<\/strong>\u00a0\u0414\u043b\u044f \u0448\u0430\u0433\u0430 \u0441 URI \u043f\u0430\u043d\u0435\u043b\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u043d\u0430 \u0441\u0445\u0435\u043c\u0443, \u043f\u0443\u0442\u044c \u0438 \u043e\u043f\u0446\u0438\u0438 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0432\u044b\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430. \u0427\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u043f\u0446\u0438\u044f, \u043f\u0430\u0440\u043e\u043b\u044c \u0438\u043b\u0438 \u043a\u043b\u044e\u0447, \u0437\u0430\u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0438 \u0438\u0437 \u043f\u0430\u043d\u0435\u043b\u0438 \u043d\u0435 \u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>\u0412\u0438\u0434\u0435\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438.<\/strong>\u00a0\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u00a0<code>{{files.inbox:inbox}}<\/code>\u00a0\u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0442\u0435\u043c, \u0432\u043e \u0447\u0442\u043e \u043e\u043d\u043e \u0440\u0430\u0441\u043a\u0440\u043e\u0435\u0442\u0441\u044f: \u0433\u0440\u0430\u0444 \u0447\u0438\u0442\u0430\u0435\u0442\u00a0<code>config\/context.sample.json<\/code>\u00a0\u0438\u00a0<code>config\/*.config.json<\/code>\u00a0\u0440\u044f\u0434\u043e\u043c \u0441 \u0444\u0430\u0439\u043b\u043e\u043c \u0438\u043b\u0438 \u0434\u043e \u0442\u0440\u0451\u0445 \u043f\u0430\u043f\u043e\u043a \u0432\u044b\u0448\u0435 \u0438 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0432\u043e\u0440\u043a\u0435\u0440 Tsak. \u041f\u0440\u0430\u0432\u043a\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0441\u0430\u043c \u043f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0440\u0430\u0432\u0438\u0442\u044c \u043c\u044b\u0448\u044c\u044e.<\/strong>\u00a0\u0428\u0430\u0433 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437 \u043f\u0430\u043b\u0438\u0442\u0440\u044b \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u00ab+\u00bb \u043c\u0435\u0436\u0434\u0443 \u0448\u0430\u0433\u0430\u043c\u0438, \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0432\u0438\u0448\u0435\u0439\u00a0<code>Delete<\/code>, \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u043e\u0432\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0438\u043b\u0438 \u0432\u043d\u0443\u0442\u0440\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f; \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0438 \u0442\u0435\u043a\u0441\u0442\u044b \u043f\u0440\u0430\u0432\u044f\u0442\u0441\u044f \u0432 \u043f\u0430\u043d\u0435\u043b\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432.<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u0435\u043d\u044f\u0442\u044c \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0443.<\/strong>\u00a0\u0421\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e \u0438\u043b\u0438 \u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437, \u0441\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0438\u043b\u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0440\u0430\u0437\u043e\u043c, \u043c\u0430\u0441\u0448\u0442\u0430\u0431, \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u0440\u0435\u0434\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0441\u0430\u043c\u044b\u0439 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 \u0434\u0430\u0451\u0442\u00a0<code>redb-route-eip<\/code>: \u0432 \u0435\u0433\u043e\u00a0<code>routes\/orders.route.xml<\/code>\u00a0\u0448\u0435\u0441\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u0434\u0440\u044f\u0434.<\/p>\n<h3>\u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b Mermaid<\/h3>\n<p>\u0413\u0440\u0430\u0444 \u0436\u0438\u0432\u0451\u0442 \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435, \u0430 \u0432 README, \u0432\u0438\u043a\u0438 \u0438\u043b\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0443\u0436\u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u0440\u0430\u0437\u043e\u0439\u0434\u0451\u0442\u0441\u044f \u0441 \u043a\u043e\u0434\u043e\u043c. \u041a\u043e\u043c\u0430\u043d\u0434\u0430\u00a0<strong>redb Route: Show Mermaid Diagram<\/strong>\u00a0\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0444\u0430\u0439\u043b, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u00a0<code>redb-route-xml mermaid<\/code>\u00a0\u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0442\u0435\u043a\u0441\u0442 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u0432 \u043d\u043e\u0432\u043e\u0439 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 Markdown. \u0414\u043b\u044f \u043d\u0435\u0451 \u043d\u0443\u0436\u0435\u043d \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 .NET:<\/p>\n<pre><code class=\"bash\">dotnet tool install -g redb.Route.Xml.CodeGen<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043e\u043d \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0435, \u0438 \u0442\u0430 \u0436\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0438\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430:<\/p>\n<pre><code class=\"bash\">dotnet tool restoredotnet redb-route-xml mermaid routes\/files.route.xml<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412\u043e\u0442 \u0447\u0442\u043e \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u00a0<code>redb-route-file<\/code>, \u0431\u0435\u0437 \u043f\u0440\u0430\u0432\u043e\u043a:<\/p>\n<pre><code><\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u042d\u0442\u043e \u0442\u0435\u043a\u0441\u0442, \u0430 \u043d\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430: GitHub, GitLab \u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0432\u0438\u043a\u0438 \u0440\u0438\u0441\u0443\u044e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0431\u043b\u043e\u043a \u0441\u0430\u043c\u0438, \u0430 \u0432 VS Code \u0435\u0433\u043e \u0432\u0438\u0434\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 Markdown \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f Mermaid. \u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0438\u0437 \u0442\u043e\u0433\u043e \u0436\u0435 \u0434\u0435\u0440\u0435\u0432\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0439, \u0447\u0442\u043e \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442: \u0440\u043e\u043c\u0431\u00a0<code>choice<\/code>, \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u0443\u0441\u043b\u043e\u0432\u0438\u044f, \u043e\u0432\u0430\u043b\u00a0<code>otherwise<\/code>, \u0434\u0432\u043e\u0439\u043d\u0430\u044f \u0440\u0430\u043c\u043a\u0430 \u0443 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438. \u041f\u043e\u0434\u043f\u0438\u0441\u0438 \u0443\u0437\u043b\u043e\u0432 \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u0430 \u0448\u0430\u0433\u043e\u0432 \u0434\u0432\u0438\u0436\u043a\u0430 (<code>setBodyExpression<\/code>,\u00a0<code>richLogScope<\/code>), \u0430 \u043d\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438, \u0438 \u0434\u043b\u0438\u043d\u043d\u044b\u0435 URI \u043e\u0431\u0440\u0435\u0437\u0430\u044e\u0442\u0441\u044f.<\/p>\n<h3>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0430<\/h3>\n<p>\u041c\u0430\u0440\u0448\u0440\u0443\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d, \u0433\u0440\u0430\u0444 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d \u0433\u043b\u0430\u0437\u0430\u043c\u0438. \u0414\u0430\u043b\u044c\u0448\u0435 \u0442\u0430 \u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0447\u0442\u043e \u0438 \u043d\u0430 \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0432\u0430\u0448\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u0435:<\/p>\n<pre><code class=\"bash\">dotnet build -p:PackRouteOnBuild=true -p:Version=1.0.0<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0421\u0431\u043e\u0440\u043a\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443 \u043f\u043e \u0441\u0445\u0435\u043c\u0435, \u043a\u0430\u0436\u0434\u0443\u044e \u043e\u043f\u0446\u0438\u044e \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430 \u043f\u043e \u0435\u0451 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0443, \u0431\u0438\u043d\u044b \u043f\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c \u0441\u0431\u043e\u0440\u043a\u0430\u043c, \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0432\u0440\u043e\u0434\u0435\u00a0<code>resources\/order.xsd<\/code>\u00a0\u0438 \u043a\u043b\u044e\u0447\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u0437\u0430\u0442\u0435\u043c \u043f\u0438\u0448\u0435\u0442 \u043f\u0430\u043a\u0435\u0442\u00a0<code>pkg\/orders-1.0.0.tpkg<\/code>. \u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438, \u043f\u0430\u043a\u0435\u0442 \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f. \u0411\u0435\u0437 \u043f\u0430\u043a\u0435\u0442\u0430 \u0442\u0435 \u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442:<\/p>\n<pre><code class=\"bash\">dotnet redb-route-xml check .<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0427\u0442\u043e \u0435\u0449\u0451 \u043e\u043d\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u043a\u0440\u0435\u0442\u044b \u0432 URI \u0438\u043b\u0438 \u0432\u0438\u0441\u044f\u0447\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0431\u0438\u043d\u044b, \u0438 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0435\u0451 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u00a0<a href=\"https:\/\/redb.ru\/articles\/route-xml-markup\" rel=\"noopener nofollow\">\u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e \u0444\u043e\u0440\u043c\u0430\u0442<\/a>.<\/p>\n<h3>\u041d\u0430 \u0432\u043e\u0440\u043a\u0435\u0440<\/h3>\n<p>\u0428\u0430\u0431\u043b\u043e\u043d \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442 \u0438 \u0441\u0442\u0435\u043d\u0434: \u0444\u0430\u0439\u043b compose \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0437 \u0432\u043e\u0440\u043a\u0435\u0440\u0430 Tsak \u0438 \u043c\u043e\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u00a0<code>pkg\/<\/code>\u00a0\u043a\u0430\u043a \u0435\u0433\u043e \u043f\u0430\u043f\u043a\u0443 \u043c\u043e\u0434\u0443\u043b\u0435\u0439.<\/p>\n<pre><code class=\"bash\">docker compose -f deploy\/docker-compose.files.yml up -d<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412 \u043b\u043e\u0433\u0435 \u043f\u043e\u0439\u0434\u0443\u0442 \u0441\u0442\u0440\u043e\u043a\u0438\u00a0<code>processed order-N.xml: ...<\/code>. \u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u044f\u0442\u044b\u0439 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u043d\u0430\u0440\u043e\u0447\u043d\u043e \u043d\u0435 XML: \u043e\u043d \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0441\u0445\u0435\u043c\u0443 \u0438 \u0443\u0435\u0437\u0436\u0430\u0435\u0442 \u0432\u00a0<code>error\/<\/code>, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u043a\u0432\u0438\u0442\u0430\u043d\u0446\u0438\u044e \u0432\u00a0<code>outbox<\/code>. \u041d\u0430 \u0441\u0432\u043e\u0451\u043c \u0432\u043e\u0440\u043a\u0435\u0440\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c\u00a0<code>.tpkg<\/code>\u00a0\u0432 \u0435\u0433\u043e \u043f\u0430\u043f\u043a\u0443\u00a0<code>modules<\/code>: \u0432\u043e\u0440\u043a\u0435\u0440 \u043f\u043e\u0434\u043d\u0438\u043c\u0435\u0442 \u043c\u043e\u0434\u0443\u043b\u044c \u0441\u0430\u043c \u0438 \u0442\u0430\u043a \u0436\u0435 \u0432\u044b\u0433\u0440\u0443\u0437\u0438\u0442, \u0435\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u0443\u0431\u0440\u0430\u0442\u044c. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0432\u00a0<code>context.json<\/code>\u00a0\u0440\u044f\u0434\u043e\u043c \u0441 \u043f\u0430\u043a\u0435\u0442\u043e\u043c \u0438\u043b\u0438 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u043e\u0440\u043a\u0435\u0440\u0430. \u041a\u0430\u043a Tsak \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0438\u0437 \u0442\u0430\u043a\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435\u00a0<a href=\"https:\/\/redb.ru\/articles\/tsak-microservices\" rel=\"noopener nofollow\">\u043f\u0440\u043e \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u043d\u0430 Tsak<\/a>.<\/p>\n<h3>\u0413\u0440\u0430\u043d\u0438\u0446\u044b<\/h3>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0427\u0442\u043e<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041a\u0430\u043a \u0441\u0435\u0439\u0447\u0430\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0421\u0432\u043e\u0439 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440, \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438, \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442: \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0434\u0430\u0451\u0442 Red Hat XML \u043f\u043e \u0441\u0445\u0435\u043c\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442: \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0441\u0445\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 Red Hat XML \u0447\u0435\u0440\u0435\u0437 \u0435\u0433\u043e API<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438\u00a0<code>#<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0431\u0438\u043d\u044b \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u0431\u0435\u0437 \u0444\u0438\u043b\u044c\u0442\u0440\u0430 \u043f\u043e \u0442\u0438\u043f\u0443<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041d\u043e\u0432\u044b\u0435 \u043e\u043f\u0446\u0438\u0438 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 Mermaid<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0442\u0435\u043a\u0441\u0442 \u0432 Markdown, \u043d\u0443\u0436\u0435\u043d \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u00a0<code>redb-route-xml<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">New Project<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0443\u0436\u0435\u043d SDK .NET; \u043f\u0430\u043a\u0435\u0442\u044b \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0441\u0442\u0430\u0432\u044f\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0411\u0435\u0437 \u0441\u0435\u0442\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0445\u0435\u043c\u0430, \u0434\u0435\u0440\u0435\u0432\u043e, \u0433\u0440\u0430\u0444 \u0438 \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442; \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0443\u0436\u0435\u043d \u0438\u00a0<code>.vsix<\/code>\u00a0Red Hat XML<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043a\u043d\u043e\u043f\u043a\u0430\u00a0<strong>redb<\/strong>\u00a0\u0432 \u043f\u0430\u043d\u0435\u043b\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u00a0<strong>Developer: Reload Window<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Open VSX<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442, \u0434\u043b\u044f VSCodium \u0438 Cursor \u0435\u0441\u0442\u044c\u00a0<code>.vsix<\/code>\u00a0\u0438\u0437 \u0440\u0435\u043b\u0438\u0437\u0430<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>\u0412\u0435\u0440\u0441\u0438\u0438<\/h3>\n<p>\u0423 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u044f \u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u044f, 0.2.x, \u0438 \u043e\u043d\u0430 \u043d\u0435 \u0434\u0432\u0438\u0436\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438 redb. \u0421\u0445\u0435\u043c\u0443, \u0441\u043f\u0438\u0441\u043e\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0431\u0438\u043d\u043e\u0432 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0435\u043b\u0438\u0437 redb.Route \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0437\u0430\u043d\u043e\u0432\u043e \u0438\u0437 \u0441\u0432\u043e\u0438\u0445 \u0441\u0431\u043e\u0440\u043e\u043a \u0438 \u0441\u0432\u0435\u0440\u044f\u0435\u0442 \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043b\u0435\u0436\u0438\u0442 \u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438. \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u0432\u044b\u0448\u043b\u043e \u0432 Marketplace 23 \u043e\u043a\u0442\u044f\u0431\u0440\u044f 2026, \u0432\u0435\u0440\u0441\u0438\u044f 0.2.25 \u0432\u044b\u0448\u043b\u0430 29 \u043e\u043a\u0442\u044f\u0431\u0440\u044f \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0440\u0435\u043b\u0438\u0437\u0443\u00a0<a href=\"https:\/\/github.com\/redbase-app\/redb-route\/releases\/tag\/v4.6.0\" rel=\"noopener nofollow\">redb-route v4.6.0<\/a>, \u0442\u043e\u0442 \u0436\u0435\u00a0<code>.vsix<\/code>\u00a0\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d \u0438 \u043a \u043d\u0435\u043c\u0443. \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439 Apache 2.0.<\/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 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 \u043d\u0430\u00a0<a href=\"http:\/\/redb.ru\/articles\" rel=\"noopener nofollow\">redb.ru\/articles<\/a>, \u0435\u0449\u0451 \u043d\u0430\u00a0<a href=\"https:\/\/habr.com\/ru\/users\/grelikt\/articles\/\" rel=\"noopener 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\/1103666\/\">https:\/\/habr.com\/ru\/articles\/1103666\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>redb.route VSCode\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f VS Code \u0432 Marketplace: \u043f\u0440\u043e\u0435\u043a\u0442 \u0438\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u0430, \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u043f\u043e \u0441\u0445\u0435\u043c\u0435, \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0431\u0438\u043d\u044b, \u0434\u0435\u0440\u0435\u0432\u043e \u0438 \u0433\u0440\u0430\u0444 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432, Mermaid, \u043f\u0443\u0442\u044c \u0434\u043e \u0432\u043e\u0440\u043a\u0435\u0440\u0430 Tsak.  \u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0432 redb.Route \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 C#, \u0430 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u043e\u0439: \u0444\u0430\u0439\u043b\u00a0.route.xml\u00a0\u043a\u043b\u0430\u0434\u0451\u0442\u0441\u044f \u0432 \u043f\u0430\u043a\u0435\u0442, \u043f\u0430\u043a\u0435\u0442 \u0432 \u043f\u0430\u043f\u043a\u0443 \u0432\u043e\u0440\u043a\u0435\u0440\u0430 Tsak, \u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0424\u043e\u0440\u043c\u0430\u0442\u0443 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d, \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0439 XML, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u0433\u0440\u0443\u0437\u0438\u0442 \u043a\u0430\u043a \u0435\u0441\u0442\u044c. \u041d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0433\u043e \u0440\u0443\u043a\u0430\u043c\u0438 \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e: \u043a\u0430\u043a\u0438\u0435 \u0443 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 \u043e\u043f\u0446\u0438\u0438, \u043a\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0431\u0438\u043d \u0441\u043e\u0441\u043b\u0430\u0442\u044c\u0441\u044f, \u043a\u0443\u0434\u0430 \u043f\u043e\u0439\u0434\u0451\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u043d\u0438 \u043e\u0434\u043d\u0430 \u0432\u0435\u0442\u043a\u0430 \u043d\u0435 \u043f\u043e\u0434\u043e\u0448\u043b\u0430.\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u00a0redb Route XML\u00a0\u0434\u043b\u044f VS Code. \u0421 \u043a\u043e\u043d\u0446\u0430 \u043e\u043a\u0442\u044f\u0431\u0440\u044f \u043e\u043d\u043e \u0432 Visual Studio Marketplace, \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f 0.2.25. \u041d\u0438\u0436\u0435 \u0432\u0435\u0441\u044c \u043f\u0443\u0442\u044c \u0441 \u043d\u0438\u043c: \u043e\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 \u043f\u0430\u043f\u043a\u0438 \u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443, \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0438 \u0433\u0440\u0430\u0444 \u0434\u043e \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u043b\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438 \u043c\u043e\u0434\u0443\u043b\u044f \u043d\u0430 \u0432\u043e\u0440\u043a\u0435\u0440\u0435.\u0427\u0442\u043e \u044d\u0442\u043e \u0434\u0430\u0451\u0442\u0421\u0442\u0430\u0440\u0442 \u0437\u0430 \u043c\u0438\u043d\u0443\u0442\u0443.\u00a0\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0441 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430\u043c\u0438, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0438 \u0441\u0442\u0435\u043d\u0434\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0431\u0435\u0437 \u0437\u043d\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u00a0dotnet new\u00a0\u0438 \u0431\u0435\u0437 \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432.\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0438\u0434\u043d\u0430, \u043f\u043e\u043a\u0430 \u0432\u044b \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442\u0435.\u00a0\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u043e\u043f\u0446\u0438\u044f \u043d\u0435 \u0442\u043e\u0433\u043e \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 \u0438\u043b\u0438 \u043d\u0435 \u0442\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430 \u043f\u043e\u0434\u0447\u0451\u0440\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443, \u0430 \u043d\u0435 \u0432 \u043b\u043e\u0433\u0435 \u0432\u043e\u0440\u043a\u0435\u0440\u0430 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043a\u043b\u0430\u0434\u043a\u0438.\u041e\u043f\u0446\u0438\u0438 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c.\u00a0\u0423 \u043e\u0434\u043d\u043e\u0439 Kafka \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u043e\u0440\u043e\u043a\u0430 \u043e\u043f\u0446\u0438\u0439; \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0438\u0445 \u0441 \u0442\u0438\u043f\u0430\u043c\u0438 \u0438 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u0438 \u044d\u0442\u043e \u0440\u043e\u0432\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0442 \u0441\u0435\u0440\u0432\u0438\u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0440\u0435\u043b\u0438\u0437\u0430.\u041c\u0430\u0440\u0448\u0440\u0443\u0442 \u043f\u043e\u043d\u044f\u0442\u0435\u043d \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u0432\u0442\u043e\u0440\u0443.\u00a0\u0413\u0440\u0430\u0444 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438, \u0432\u0435\u0442\u043a\u0438 \u0438 \u043f\u0443\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435 \u043f\u043e\u0434\u043e\u0448\u043b\u043e \u043d\u0438 \u043f\u043e\u0434 \u043e\u0434\u043d\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435. \u0421 \u043d\u0438\u043c \u043f\u0440\u043e\u0449\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u043e\u0442\u043e\u043a \u0441 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u043e\u043c, \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u043c \u0438\u043b\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439, \u0447\u0435\u043c \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u0443.\u041f\u0440\u0430\u0432\u043a\u0438 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u044b\u043c\u0438 \u0432 git.\u00a0\u0413\u0440\u0430\u0444 \u043c\u0435\u043d\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u0436\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0432 \u0442\u0435\u043a\u0441\u0442\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435, \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u043e\u0435 \u043c\u044b\u0448\u044c\u044e, \u043d\u0430 \u0440\u0435\u0432\u044c\u044e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 diff.\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043d\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441 \u043a\u043e\u0434\u043e\u043c.\u00a0\u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 Mermaid \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0438\u0437 \u0442\u043e\u0433\u043e \u0436\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0432\u043e\u0440\u043a\u0435\u0440\u0435, \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439.\u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442.\u00a0\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434 Apache 2.0, \u0430 \u0441\u0445\u0435\u043c\u0430, \u0434\u0435\u0440\u0435\u0432\u043e \u0438 \u0433\u0440\u0430\u0444 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0431\u0435\u0437 \u0441\u0435\u0442\u0438.\u0427\u0442\u043e \u0443\u043c\u0435\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435New Project:\u00a0\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 redb \u0438 \u0441\u0430\u043c\u0430 \u0441\u0442\u0430\u0432\u0438\u0442 \u043f\u0430\u043a\u0435\u0442\u044b \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432.\u0421\u0445\u0435\u043c\u0430:\u00a0\u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0438 \u043e\u043f\u0446\u0438\u0439 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043b\u0435\u0442\u0443.\u0417\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0438:\u00a0\u043c\u0430\u0440\u0448\u0440\u0443\u0442, \u0432\u044b\u0431\u043e\u0440 \u0438 \u0431\u043b\u043e\u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u043e\u0434\u043d\u043e\u0439 \u0432\u0441\u0442\u0430\u0432\u043a\u043e\u0439.\u0421\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0431\u0438\u043d\u044b:\u00a0\u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u043e\u00a0#.\u0414\u0435\u0440\u0435\u0432\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432:\u00a0\u0432\u0441\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0441 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443.\u0413\u0440\u0430\u0444:\u00a0\u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u043a\u0430\u043a \u0441\u0445\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u043c\u044b\u0448\u044c\u044e \u0438 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u043c.Mermaid:\u00a0\u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u0434\u043b\u044f README \u0438 \u0432\u0438\u043a\u0438.\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\u0412 \u043f\u0430\u043d\u0435\u043b\u0438\u00a0Extensions\u00a0\u043d\u0430\u0439\u0434\u0438\u0442\u0435\u00a0redb Route XML\u00a0\u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435\u00a0Install, \u0438\u043b\u0438 \u0438\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430:code &#8212;install-extension redb.redb-route-xmlredb Route XML \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439\u0412\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0438\u043c VS Code \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u00a0Red Hat XML: \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043f\u043e \u0441\u0445\u0435\u043c\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043e\u043d, \u0430 \u043d\u0430\u0448\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u043e\u0442\u0434\u0430\u0451\u0442 \u0435\u043c\u0443 \u0441\u0445\u0435\u043c\u0443. \u041d\u0443\u0436\u0435\u043d VS Code 1.85 \u0438\u043b\u0438 \u043d\u043e\u0432\u0435\u0435.\u0414\u043b\u044f \u043c\u0430\u0448\u0438\u043d\u044b \u0431\u0435\u0437 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a Marketplace, \u0434\u043b\u044f VSCodium \u0438 Cursor \u0442\u043e\u0442 \u0436\u0435 \u0444\u0430\u0439\u043b\u00a0redb-route-xml-0.2.25.vsix\u00a0\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d \u043a \u0440\u0435\u043b\u0438\u0437\u0430\u043c\u00a0redb-route \u043d\u0430 GitHub:\u00a0Extensions, \u043c\u0435\u043d\u044e\u00a0&#8230;,\u00a0Install from VSIX. \u0411\u0435\u0437 \u0441\u0435\u0442\u0438 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0442\u0430\u043a \u0436\u0435 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f\u00a0.vsix\u00a0\u043e\u0442 Red Hat XML.\u041d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0431\u0435\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438\u041a\u043e\u043c\u0430\u043d\u0434\u0430\u00a0redb: New Project\u00a0\u0438\u0437 \u043f\u0430\u043b\u0438\u0442\u0440\u044b \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 redb \u0447\u0435\u0440\u0435\u0437\u00a0dotnet new. \u0412\u0432\u0435\u0440\u0445\u0443 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0435: SDK .NET \u0438 \u0434\u0432\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432,\u00a0redb.Templates\u00a0\u0438\u00a0redb.Tsak.Templates. \u0415\u0441\u043b\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 \u043d\u0435\u0442, \u0440\u044f\u0434\u043e\u043c \u043a\u043d\u043e\u043f\u043a\u0430\u00a0Install:\u041f\u0430\u043a\u0435\u0442\u044b \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b\u041a\u043e\u0433\u0434\u0430 \u043d\u0430 nuget.org \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u0430, \u043a\u043d\u043e\u043f\u043a\u0430 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u00a0Update.\u041a\u0430\u0436\u0434\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u044d\u0442\u043e \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430, \u0438 \u0438\u0445 \u0437\u0434\u0435\u0441\u044c \u0442\u0440\u0438 \u0433\u0440\u0443\u043f\u043f\u044b.\u041c\u043e\u0434\u0443\u043b\u0438 XML-\u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432, \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432\u00a0redb-route-*. \u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043c\u043e\u0434\u0443\u043b\u044c Tsak \u0441 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430\u043c\u0438 \u0432 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0435 \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u043d\u0430 C# \u0440\u044f\u0434\u043e\u043c, \u0432\u00a0routes\/*.cs: \u0443\u0434\u043e\u0431\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0434\u0432\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430. \u0421\u0440\u0435\u0434\u0438 \u043d\u0438\u0445 \u0444\u0430\u0439\u043b\u044b (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0430\u043f\u043a\u0430, FTP, SFTP), REST API, SQL-outbox \u0438 \u043f\u0430\u043a\u0435\u0442\u043d\u0430\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0430, \u043e\u0431\u044a\u0435\u043a\u0442\u044b redb, Kafka, RabbitMQ, AMQP 1.0, MQTT, S3, LDAP, \u043f\u043e\u0447\u0442\u0430, AS2 \u0438 AS4, \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435 Quartz, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 XSD \u0438 XSLT, scatter-gather \u0438 \u043d\u0430\u0431\u043e\u0440 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0431\u0435\u0437 \u0431\u0440\u043e\u043a\u0435\u0440\u0430.\u041a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0438 \u0444\u043e\u0440\u043c\u0430\u0425\u043e\u0441\u0442\u044b Tsak: \u0432\u043e\u0440\u043a\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u043e\u0434\u0443\u043b\u0438 \u0438\u0437 \u0441\u0432\u043e\u0435\u0439 \u043f\u0430\u043f\u043a\u0438, \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0438\u0445 \u043d\u0430 \u043b\u0435\u0442\u0443, \u0434\u0430\u0451\u0442 API \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a.\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u00a0\u043d\u0430 redb: \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0435, \u0441\u0430\u0439\u0442\u044b \u043d\u0430 Blazor \u0438 Razor Pages, Blazor WebAssembly \u0441 REST API \u043d\u0430 redb.Route, Blazor BFF, \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0432\u043e\u0440\u043a\u0435\u0440, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 redb.Identity, \u0447\u0430\u0442 \u0441 LLM.\u0428\u0430\u0431\u043b\u043e\u043d\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439\u0421\u043f\u0440\u0430\u0432\u0430 \u0444\u043e\u0440\u043c\u0430 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430: \u0438\u043c\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0446\u0435\u043b\u0435\u0432\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430, \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u043f\u0430\u043f\u043a\u0430. \u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0435 \u043d\u0435\u0442 SDK, \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u0430, \u0430 \u043f\u0430\u043f\u043a\u0443, \u0433\u0434\u0435 \u0443\u0436\u0435 \u043b\u0435\u0436\u0430\u0442 \u0444\u0430\u0439\u043b\u044b, \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u0442.Create\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u00a0dotnet new, \u0430 \u0435\u0441\u043b\u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0435\u0441\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0435\u0449\u0451 \u0438\u00a0dotnet tool restore. \u0412\u044b\u0432\u043e\u0434 \u0438\u0434\u0451\u0442 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0438 \u0432 \u043a\u0430\u043d\u0430\u043b\u00a0redb Route, \u0448\u0430\u0433 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c. \u0412 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 \u044d\u0442\u043e\u043c \u043e\u043a\u043d\u0435, \u0432 \u043d\u043e\u0432\u043e\u043c \u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c.\u041a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0438 \u0444\u043e\u0440\u043c\u0430 \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u0438\u0437 \u0441\u0430\u043c\u0438\u0445 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432. \u041d\u043e\u0432\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u0432 \u043f\u0430\u043a\u0435\u0442\u0430\u0445 redb \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0431\u0435\u0437 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f.\u041f\u0440\u043e\u0435\u043a\u0442 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432\u0414\u0430\u043b\u044c\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0434\u0451\u0442 \u043d\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u0435\u00a0redb.Route XML module: files\u00a0(redb-route-file). \u0415\u043c\u0443 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u043d\u0438 \u043e\u0434\u0438\u043d \u0441\u0435\u0440\u0432\u0435\u0440: \u043f\u0430\u043f\u043a\u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 XSD, \u043f\u0430\u043f\u043a\u0438 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0438 \u0441\u0431\u043e\u0439\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u0432\u0438\u0442\u0430\u043d\u0446\u0438\u044f \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0444\u0430\u0439\u043b. \u0418\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u044d\u0442\u043e \u0442\u0430 \u0436\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u0447\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430:dotnet new install redb.Templatesdotnet new redb-route-file -n OrdersOrders\/  .config\/dotnet-tools.json        \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 redb-route-xml  context.xml                      \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430: \u0431\u0438\u043d\u044b, C#-\u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b  routes\/files.route.xml           \u0434\u0432\u0430 XML-\u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430  routes\/CsvFilesRoute.cs          \u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u0438\u0451\u043c \u0434\u043b\u044f CSV \u043d\u0430 C#  resources\/order.xsd              \u0441\u0445\u0435\u043c\u0430 \u0437\u0430\u043a\u0430\u0437\u0430  config\/orders.config.json        \u0438\u043c\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0438 \u0430\u0432\u0442\u043e\u0437\u0430\u043f\u0443\u0441\u043a, \u0435\u0434\u0435\u0442 \u0432 \u043f\u0430\u043a\u0435\u0442\u0435  config\/context.sample.json       \u043e\u0431\u0440\u0430\u0437\u0435\u0446 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0434\u043b\u044f \u0432\u044b\u043a\u043b\u0430\u0434\u043a\u0438  deploy\/docker-compose.files.yml  \u043c\u043e\u0434\u0443\u043b\u044c \u043d\u0430 \u0432\u043e\u0440\u043a\u0435\u0440\u0435 Tsak\u0420\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u044d\u0442\u043e \u0441\u043e\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0430. \u041c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u043b\u0435\u0436\u0430\u0442 \u0432\u00a0routes\/, \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d\u0438 \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u0438\u043c\u0435\u043d\u0438, \u0432\u00a0resources\/.\u00a0context.xml\u00a0\u0433\u0440\u0443\u0437\u0438\u0442\u0441\u044f \u0440\u0430\u043d\u044c\u0448\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u0432\u0438\u0434\u044f\u0442 \u0435\u0433\u043e \u0431\u0438\u043d\u044b. \u0412 \u043f\u0430\u043a\u0435\u0442\u0435 \u0435\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044f,\u00a0orders.config.json, \u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u043e\u0440\u043a\u0435\u0440\u0430: \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043f\u0430\u043a\u0435\u0442 \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u0435\u043d\u0434 \u0438 \u0432 \u043f\u0440\u043e\u0434 \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0438.\u0420\u0430\u0437\u043c\u0435\u0442\u043a\u0430 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435\u0412\u043e\u0442 \u0432\u0442\u043e\u0440\u043e\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0438\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u0430, \u0442\u043e\u0442, \u0447\u0442\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0444\u0430\u0439\u043b\u044b:&lt;routes xmlns=&#187;urn:redb:route:1.0&#8243;&gt;  &lt;route id=&#187;orders-files-in&#187; description=&#187;Processes the files of the inbox&#187;&gt;    &lt;from uri=&#187;file:\/\/{{files.inbox:inbox}}?antInclude=*.xml&amp;amp;delay=5000&amp;amp;moveTo=done&amp;amp;moveFailed=error&#187;\/&gt;    &lt;convertBody type=&#187;System.String&#187;\/&gt;    &lt;validateXsd file=&#187;resources\/order.xsd&#187; throwOnFailure=&#187;true&#187;\/&gt;    &lt;log level=&#187;Information&#187; showRouteId=&#187;true&#187;&gt;      &lt;message&gt;processed ${header.redbFile.NameOnly}: ${body}&lt;\/message&gt;    &lt;\/log&gt;    &lt;setBody expr=&#187;received ${header.redbFile.NameOnly}&#187;\/&gt;    &lt;to uri=&#187;file:\/\/{{files.outbox:outbox}}?fileName=${header.redbFile.NameOnly}.receipt&#187;\/&gt;  &lt;\/route&gt;&lt;\/routes&gt;\u041f\u044f\u0442\u044c \u0432\u0435\u0449\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0445\u0432\u0430\u0442\u0430\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u0447\u0438\u0442\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442:&lt;from&gt;\u00a0\u0438\u00a0&lt;to&gt;\u00a0\u044d\u0442\u043e \u0432\u0445\u043e\u0434 \u0438 \u0432\u044b\u0445\u043e\u0434. URI \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u043a\u0430\u043a \u0432 C#-\u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430\u0445: \u0441\u0445\u0435\u043c\u0430 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430, \u043f\u0443\u0442\u044c, \u043e\u043f\u0446\u0438\u0438. \u0414\u043b\u0438\u043d\u043d\u044b\u0439 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440\u00a0&lt;to&gt;&lt;sql dataSource=&#187;#main-db&#187;&gt;\u00a0\u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432\u043d\u0443\u0442\u0440\u0438.\u0428\u0430\u0433\u0438 \u0438\u0434\u0443\u0442 \u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437:\u00a0\u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0442\u0435\u043b\u043e \u043a \u0441\u0442\u0440\u043e\u043a\u0435, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u043e XSD, \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043b\u043e\u0433, \u043f\u043e\u0434\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u0435\u043b\u043e, \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u0432\u0438\u0442\u0430\u043d\u0446\u0438\u044e. \u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043d\u0435 \u043f\u0440\u043e\u0448\u0451\u043b \u0441\u0445\u0435\u043c\u0443, \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0443\u0432\u043e\u0434\u0438\u0442 \u0435\u0433\u043e \u0432\u00a0error\/\u00a0\u043f\u043e \u043e\u043f\u0446\u0438\u0438\u00a0moveFailed.{{files.inbox:inbox}}\u00a0\u044d\u0442\u043e \u043f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u041e\u043d \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u043e\u0440\u043a\u0435\u0440\u0430. \u041a\u043b\u044e\u0447 \u0431\u0435\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 \u043f\u0430\u043a\u0435\u0442\u0430 \u043a\u0430\u043a \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439.${header&#8230;}\u00a0\u0438\u00a0expr\u00a0\u044d\u0442\u043e \u044f\u0437\u044b\u043a \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u0442\u043e\u0442 \u0436\u0435, \u0447\u0442\u043e \u0443 C#-\u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432. \u0412 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u0441\u0442\u0440\u043e\u043a\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u043e\u043c, \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f.\u0412\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a\u00a0\u043f\u0438\u0448\u0443\u0442\u0441\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438:\u00a0&lt;choice&gt;\u00a0\u0441\u00a0&lt;when expr=&#187;&#8230;&#187;&gt;\u00a0\u0438\u00a0&lt;otherwise&gt;,\u00a0&lt;tryCatch&gt;\u00a0\u0441\u00a0&lt;try&gt;,\u00a0&lt;catch&gt;\u00a0\u0438\u00a0&lt;finally&gt;,\u00a0&lt;transaction&gt;\u00a0\u0432\u043e\u043a\u0440\u0443\u0433 \u0448\u0430\u0433\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u043c\u0438\u0442\u044f\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435. \u041f\u0435\u0440\u0432\u044b\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0448\u0430\u0431\u043b\u043e\u043d\u0430, \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u0430\u043a \u0440\u0430\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u00a0&lt;choice&gt;: \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u044f\u0442\u044b\u0439 \u0444\u0430\u0439\u043b \u043e\u043d \u043d\u0430\u0440\u043e\u0447\u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0435 XML.\u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443 \u0432 \u0442\u0435 \u0436\u0435 \u0432\u044b\u0437\u043e\u0432\u044b DSL, \u0447\u0442\u043e \u043f\u0438\u0448\u0443\u0442\u0441\u044f \u043d\u0430 C#, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0451, \u0447\u0442\u043e \u0443\u043c\u0435\u0435\u0442 \u0434\u0432\u0438\u0436\u043e\u043a, \u0443\u043c\u0435\u0435\u0442 \u0438 XML: \u0440\u0435\u0442\u0440\u0430\u0438, \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438, \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u043c\u0435\u0442\u0440\u0438\u043a\u0438, \u043c\u043e\u043a\u0438 \u0432 \u0442\u0435\u0441\u0442\u0430\u0445. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0444\u043e\u0440\u043c\u0430\u0442, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u0438 \u0437\u0430\u043c\u0435\u043d\u0430 \u043c\u043e\u0434\u0443\u043b\u044f \u043d\u0430 \u043b\u0435\u0442\u0443 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u044b \u0432 \u0441\u0442\u0430\u0442\u044c\u0435\u00a0\u00abXML-\u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u0432 redb.Route\u00bb.\u041f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u043f\u043e \u0441\u0445\u0435\u043c\u0435\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0451\u043d\u00a0urn:redb:route:1.0. \u041f\u043e \u043d\u0435\u043c\u0443 Red Hat XML \u0431\u0435\u0440\u0451\u0442 \u0441\u0445\u0435\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0435\u0441\u0451\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435, \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043b\u0435\u0442\u0443. \u041f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u0438\u0434\u0451\u0442 \u043f\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0443 \u0438\u043c\u0451\u043d, \u0430 \u043d\u0435 \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u0444\u0430\u0439\u043b\u0430: \u0447\u0443\u0436\u043e\u0439\u00a0route.xml\u00a0\u0431\u0435\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0451\u043d \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0435\u0442.\u0421\u0445\u0435\u043c\u0430 \u0437\u043d\u0430\u0435\u0442 \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u043f\u0446\u0438\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430. \u041d\u0430\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430\u00a0&lt;to&gt;&lt;kafka\u00a0\u0438 \u043f\u0440\u043e\u0431\u0435\u043b, \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u00a0topic,\u00a0brokers,\u00a0key,\u00a0acks,\u00a0compressionType\u00a0\u0438 \u0435\u0449\u0451 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u043e\u043f\u0446\u0438\u0439 Kafka \u0441 \u0438\u0445 \u0442\u0438\u043f\u0430\u043c\u0438 \u0438 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438.\u0421\u0445\u0435\u043c\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0435\u0442 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430. \u041e\u043f\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044c, \u0432\u043d\u0443\u0442\u0440\u0438\u00a0&lt;from&gt;\u00a0\u043f\u043e\u0434\u0447\u0451\u0440\u043a\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0448\u0438\u0431\u043a\u0430: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,\u00a0addressQuery\u00a0\u0443 AS4 \u0434\u0430\u0441\u0442 \u00abThe &#8216;addressQuery&#8217; attribute is not allowed\u00bb. \u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0438\u0434\u043d\u0430 \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435, \u0434\u043e \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430.\u0412\u00a0context.xml\u00a0\u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0442\u0435 \u0436\u0435: \u0432\u043d\u0443\u0442\u0440\u0438\u00a0&lt;context&gt;\u00a0\u043f\u043e\u0441\u043b\u0435\u00a0&lt;\u00a0\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u00a0bean,\u00a0components,\u00a0dataFormat,\u00a0deadLetterChannel,\u00a0onInit,\u00a0redb,\u00a0routeBuilder,\u00a0routeConfiguration.\u0421\u0445\u0435\u043c\u0443 \u043d\u0435 \u043f\u0438\u0448\u0443\u0442 \u0440\u0443\u043a\u0430\u043c\u0438. \u0415\u0451 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u00a0redb-route-xml\u00a0\u0438\u0437 \u0441\u0431\u043e\u0440\u043e\u043a \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0440\u0435\u043b\u0438\u0437\u0435 redb.Route, \u0438 \u0440\u0435\u043b\u0438\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u0441\u0445\u0435\u043c\u0430 \u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0435\u0433\u043e \u0441\u0431\u043e\u0440\u043a\u0430\u043c\u0438. \u041d\u043e\u0432\u0430\u044f \u043e\u043f\u0446\u0438\u044f \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f.\u0417\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0438\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0441\u0445\u0435\u043c\u0430 \u043d\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0436\u0435\u0442 \u0446\u0435\u043b\u0438\u043a\u043e\u043c: \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0431\u0435\u0437\u00a0from\u00a0\u0438\u043b\u0438\u00a0choice\u00a0\u0431\u0435\u0437 \u0432\u0435\u0442\u043e\u043a \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b. \u0414\u043b\u044f \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u0430\u043c, \u0433\u0434\u0435 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442:\u041d\u0430\u0431\u0440\u0430\u0442\u044c\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f&lt;route\u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0441 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0435\u043c&lt;choice\u0432\u044b\u0431\u043e\u0440 \u0441 \u0432\u0435\u0442\u043a\u043e\u0439\u00a0when\u00a0\u0438\u00a0otherwise&lt;tryCatch\u0431\u043b\u043e\u043a\u00a0try\u00a0\u0441\u00a0catch\u00a0\u0438\u00a0finally\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f &#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-501672","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/501672","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=501672"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/501672\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=501672"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=501672"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=501672"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}