{"id":394400,"date":"2024-06-29T11:35:37","date_gmt":"2024-06-29T11:35:37","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=394400"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=394400","title":{"rendered":"<span>Zeebe \u0438 Camunda: \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 BPM-\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u043e\u0434 \u0432\u044b\u0441\u043e\u043a\u0438\u043c\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430\u043c\u0438<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/36d\/f80\/e9b\/36df80e9b53a23804484d6d4e4df1032.png\" width=\"1094\" height=\"491\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/36d\/f80\/e9b\/36df80e9b53a23804484d6d4e4df1032.png\"\/><figcaption><\/figcaption><\/figure>\n<p><strong>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041d\u0438\u043a\u043e\u043b\u0430\u0439 \u041f\u0435\u0440\u0432\u0443\u0445\u0438\u043d, \u044f Senior Java Developer \u0432 \u0420\u0430\u0439\u0444\u0444\u0430\u0439\u0437\u0435\u043d\u0431\u0430\u043d\u043a\u0435. \u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c BPM-\u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438 Camunda \u0438 Zeebe (\u043e\u0441\u043d\u043e\u0432\u0430 Camunda-cloud). \u0415\u0441\u043b\u0438 \u0432\u044b, \u043a\u0430\u043a \u0438 \u044f, \u0441 \u0445\u043e\u0434\u0443 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u2014 Camunda \u0438\u043b\u0438 Zeebe, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u0438 \u0432 \u043a\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442\u044c, \u2014 \u0442\u043e \u0432\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e.<\/strong><\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u044f \u043f\u043e\u043f\u044b\u0442\u0430\u044e\u0441\u044c \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c Camunda \u0438 Zeebe \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \u043a\u043e\u0441\u043d\u0443\u0441\u044c \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u043f\u043e workflow \u2014 Apache Camel \u0438 Spring Integration, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0427\u0430\u0441\u0442\u043e \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0431\u0438\u0437\u043d\u0435\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043b\u044b\u0448\u0430\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0435\u0442 \u2014 \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u043b\u0438 \u043d\u0430\u0448\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441 \u044d\u0442\u0438\u043c. \u0412\u043e\u0442 \u0438 \u043c\u043d\u0435 \u0441\u0442\u0430\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u043c workflow: \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0438 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u043c rest-\u0432\u044b\u0437\u043e\u0432 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u043d\u0438\u0445.<\/p>\n<p>\u0412\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b <code>test.json<\/code> \u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c: <code>{}<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 nginx.<\/p>\n<p>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0431 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0438: \u0432 \u043c\u043e\u0435\u043c \u0440\u0430\u0441\u043f\u043e\u0440\u044f\u0436\u0435\u043d\u0438\u0438 4\u0445 \u044f\u0434\u0435\u0440\u043d\u044b\u0439 Intel(R) Core(TM) i7-4770K CPU @ 3.50GHz, SSD \u0434\u0438\u0441\u043a \u0438 24Gb \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043d\u0430\u0448\u0438 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u044b:<\/p>\n<h3>Apache-camel \u2014 \u0447\u0435\u043c\u043f\u0438\u043e\u043d, \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c<\/h3>\n<p>\u041f\u0440\u0438\u0437\u043d\u0430\u044e\u0441\u044c, \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 BPM. \u041d\u043e \u044d\u0442\u043e\u0442 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u0435\u043d, \u0447\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u0434\u043b\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0432 \u0442\u0435\u043c\u0435 BPMN, \u0438 \u0435\u0433\u043e \u0433\u043b\u0430\u0437\u0430 \u0432\u0441\u043f\u044b\u0445\u0438\u0432\u0430\u044e\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435\u043c \u2014 \u044d\u0442\u043e \u0436\u0435 \u043f\u0440\u043e Apache Camel! \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0437\u0430\u0434\u0430\u0447\u0443 \u043e\u043d \u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u043e\u0445\u043e\u0436\u0443\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0433\u043e \u0441 \u0434\u043e\u043b\u0436\u043d\u044b\u043c \u0443\u0432\u0430\u0436\u0435\u043d\u0438\u0435\u043c.<\/p>\n<p>\u0412\u043e\u0442 \u0432\u043e\u0440\u043a\u0444\u043b\u043e\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c:<\/p>\n<pre><code class=\"java\">camelContext.addRoutes(new RouteBuilder() {     @Override    public void configure() throws Exception {        from(\"direct:tuneBPMN\")                .bean(\"restExecutorService\", \"doRestRequest\")                .bean(\"restExecutorService\", \"doRestRequest\");    } });<\/code><\/pre>\n<p>\u0411\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 REST-\u0432\u044b\u0437\u043e\u0432:<\/p>\n<pre><code class=\"java\">public void doRestRequest() {    final String result = restTemplate.getForObject(restRequestUrl + \"?v=\" + random.nextLong(), String.class);    logger.debug(result); } <\/code><\/pre>\n<p><code>random.nextLong<\/code> \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. <a href=\"https:\/\/gitlab.com\/tune-bpm\/pure-apache-camel\">\u0421\u0441\u044b\u043b\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 gitlab<\/a><\/p>\n<h3>Spring Integration \u2014 \u0447\u0430\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0431\u0440\u0430\u0442\u0430\u00a0<\/h3>\n<p>\u0421 \u0440\u043e\u0441\u0442\u043e\u043c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u0438 Spring \/ Spring boot \u0437\u043d\u0430\u0447\u0438\u043c\u043e\u0441\u0442\u044c Apache Camel \u0441\u043d\u0438\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 Spring Integration. \u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0442\u043e\u0436\u0435 \u043d\u0435 BPM, \u043d\u043e \u043d\u0430\u043c \u0432\u0430\u0436\u043d\u044b \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0414\u043b\u044f \u043b\u0443\u0447\u0448\u0435\u0439 \u0441\u0445\u043e\u0436\u0435\u0441\u0442\u0438 \u0441 BPMN \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432\u043e\u0440\u043a\u0444\u043b\u043e\u0443 (\u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430) \u0432 \u0432\u0438\u0434\u0435 xml, \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0434\u0432\u0430 \u043a\u0430\u043d\u0430\u043b\u0430 \u0438 \u0434\u0432\u0430 \u0441\u0435\u0440\u0432\u0438\u0441 \u0430\u043a\u0442\u0438\u0432\u0430\u0442\u043e\u0440\u0430:<\/p>\n<pre><code class=\"java\">&lt;int:channel id=\"channelStart\"\/> &lt;int:channel id=\"channelAfterRestA\"\/>  &lt;int:gateway default-request-channel=\"channelStart\"             service-interface=\"net.pervukhin.purespringintegration.integrationcomponent.StarterGateway\"\/>  &lt;int:service-activator        input-channel=\"channelStart\"        output-channel=\"channelAfterRestA\"        ref=\"restServiceActivator\"        method=\"restA\"\/> &lt;int:service-activator        input-channel=\"channelAfterRestA\"        ref=\"restServiceActivator\"        method=\"restB\"\/><\/code><\/pre>\n<p><a href=\"https:\/\/gitlab.com\/tune-bpm\/pure-spring-integration\">\u0421\u0441\u044b\u043b\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 gitlab<\/a><\/p>\n<h3>Camunda \u2014 \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439, \u043a\u0430\u043a DasAuto<\/h3>\n<p>\u041f\u043e\u043a\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0430\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 Camunda \u2014 \u043c\u044b \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043c \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0432\u043e\u043e\u0431\u0449\u0435, \u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c in-memory h2 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u041d\u0430\u0448 \u00ab\u0441\u043b\u043e\u0436\u043d\u044b\u0439\u00bb \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b35\/8ed\/03a\/b358ed03ae8068118855e10470574461.png\" width=\"818\" height=\"290\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b35\/8ed\/03a\/b358ed03ae8068118855e10470574461.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041a\u043e\u0434 \u0434\u043b\u044f RestDelegate \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442:<\/p>\n<pre><code class=\"java\">@Component public class RestDelegate implements JavaDelegate {    private static final Logger logger = LoggerFactory.getLogger(RestDelegate.class);    private static final Random random = new Random();    ...    @Override    public void execute(DelegateExecution execution) throws Exception {        final String result = restTemplate.getForObject(restRequestUrl + \"?v=\" + random.nextLong(), String.class);        logger.debug(result);    } } <\/code><\/pre>\n<p><a href=\"https:\/\/gitlab.com\/tune-bpm\/pure-camunda\">\u0421\u0441\u044b\u043b\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 gitlab<\/a>. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u044c h2mem.<\/p>\n<h3>Zeebe \u2014 \u0434\u0432\u0438\u0436\u043e\u043a \u0434\u043b\u044f \u0432\u044b\u0441\u043e\u043a\u0438\u0445 \u043d\u0430\u0433\u0440\u0443\u0437\u043e\u043a<\/h3>\n<p>Zeebe \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0434\u0430\u0432\u043d\u043e: \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043b\u0438\u0437, \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u044b\u0439 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0432\u044b\u0448\u0435\u043b \u0432 2019. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Camunda, \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u0443\u044e, \u0430 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u0431\u0430\u0437\u0443 rockdb \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c.\u00a0<\/p>\n<p>\u041f\u043e \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u0438\u044e \u0411\u0435\u0440\u043d\u0434\u0430 \u0420\u044e\u043a\u0435\u0440\u0430, \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432 \u043d\u0435\u0439 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u0443\u0442\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u043e\u0432 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0431\u044b\u043b\u043e \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435, <a href=\"https:\/\/www.youtube.com\/watch?v=OtpvavSnzVM\"><u>\u043a\u0441\u0442\u0430\u0442\u0438<\/u><\/a>.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/312\/6e6\/562\/3126e65621fddc622ccc3c76b6fb4e13.png\" width=\"647\" height=\"386\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/312\/6e6\/562\/3126e65621fddc622ccc3c76b6fb4e13.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0421\u0443\u0434\u044f \u043f\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0443, \u043f\u0440\u0438 \u043e\u0434\u043d\u043e\u043c \u0438\u043dc\u0442\u0430\u043d\u0441\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0435 1 \u0442\u044b\u0441. \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443.<\/p>\n<p>\u0411\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c70\/d20\/34e\/c70d2034e9ec54d3ce052217117dbbd9.png\" width=\"878\" height=\"372\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c70\/d20\/34e\/c70d2034e9ec54d3ce052217117dbbd9.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430\u0448 \u0432\u043e\u0440\u043a\u0435\u0440:<\/p>\n<pre><code class=\"java\">@ZeebeWorker(type = \"restJob\") public void handleJob(JobClient jobClient, ActivatedJob activatedJob) {    final String result = restTemplate.getForObject(restRequestUrl + \"?v=\" + random.nextLong(), String.class);    logger.debug(result);     ..     jobClient.newCompleteCommand(activatedJob.getKey())            .variables(new HashMap&lt;>())            .send()            .join(); } <\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 docker:<\/p>\n<pre><code class=\"pgsql\">docker run -d --name zeebe -e ZEEBE_BROKER_CLUSTER_PARTITIONSCOUNT=24 -p 26500:26500 camunda\/zeebe<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u043f\u0430\u043f\u043a\u0443 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440:<\/p>\n<pre><code class=\"pgsql\">-v \u0432\u0430\u0448\u0430_\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f_\u043f\u0430\u043f\u043a\u0430_\u0441_\u0434\u0430\u043d\u043d\u044b\u043c\u0438:\/usr\/local\/zeebe\/data<\/code><\/pre>\n<p>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0442\u044e\u043d\u0438\u043d\u0433 (\u0432 \u0440\u0430\u043c\u043a\u0430\u0445 1 \u0438\u0441\u043d\u0442\u0430\u043d\u0441\u0430):<\/p>\n<p><code>ZEEBE_BROKER_CLUSTER_PARTITIONSCOUNT<\/code> \u2014 \u0447\u0438\u0441\u043b\u043e \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044d\u0442\u043e 1) \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u043d\u0430 \u043a\u0430\u043a\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0447\u0430\u0441\u0442\u0435\u0439 \u0438\u043b\u0438 \u043f\u0430\u043f\u043e\u043a \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0442\u044c rockdb \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b SSD \u0438\u043b\u0438 \u0436\u0435\u0441\u0442\u043a\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0430, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u043b\u0443\u0447\u0448\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f 24, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u0435\u0442 \u0441\u043a\u043e\u0440\u0435\u0435 \u0443\u0445\u0443\u0434\u0448\u0435\u043d\u0438\u0435.<\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u0432\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043d\u0435 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0440\u043e\u043b\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439:<\/p>\n<ul>\n<li>\n<p><code>ZEEBE_BROKER_THREADS_CPUTHREADCOUNT (2)<\/code> \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u043d\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><code>ZEEBE_BROKER_THREADS_IOTHREADCOUNT (2)<\/code> \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u043b\u044f \u0432\u0432\u043e\u0434\u0430\/\u0432\u044b\u0432\u043e\u0434\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u044b \u0441\u0442\u0430\u0432\u0438\u043c \u0438\u0445 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u041a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f Zeebe \u0441 \u0432\u043e\u0440\u043a\u0435\u0440\u043e\u043c <a href=\"https:\/\/gitlab.com\/tune-bpm\/pure-zeebe\">\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 gitlab<\/a>.<\/p>\n<h3>\u0414\u0430\u0435\u043c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443<\/h3>\n<p>\u0414\u043b\u044f \u0437\u0430\u043c\u0435\u0440\u0430 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d \u0437\u0430\u043f\u0443\u0441\u043a 100 \u0442\u044b\u0441. \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c 10 \u0442\u044b\u0441. \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u043c\u0435\u0440\u044f\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u041f\u0440\u043e\u0448\u0443 \u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u043c\u0435\u043d\u044f \u0437\u0430 \u043d\u0435\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c, \u043d\u043e \u043d\u0430\u0447\u0430\u043b\u043e \u043e\u0442\u0441\u0447\u0435\u0442\u0430 \u0431\u0443\u0434\u0435\u043c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0441 0, \u0430 \u0441 1 \u0442\u044b\u0441. \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432. \u042d\u0442\u043e \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0446\u0435\u043d\u0438\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u043e\u0433\u0440\u0435\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5f2\/b64\/29d\/5f2b6429de76b933acf83a8079107248.png\" width=\"1252\" height=\"804\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5f2\/b64\/29d\/5f2b6429de76b933acf83a8079107248.png\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bf0\/240\/dec\/bf0240dec4231f8bad5f95190694d1ac.png\" alt=\"Chart\" title=\"Chart\" width=\"1200\" height=\"742\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bf0\/240\/dec\/bf0240dec4231f8bad5f95190694d1ac.png\"\/><figcaption>Chart<\/figcaption><\/figure>\n<p><strong>\u041e\u0431\u044a\u044f\u0441\u043d\u044e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b:<\/strong><\/p>\n<ol>\n<li>\n<p>Apache Camel \u0438 Spring Integration \u0432\u043d\u0435 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0446\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0438 \u043d\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0447\u0438\u0432\u043e\u0441\u0442\u0438. \u0422\u0430\u043a \u0447\u0442\u043e +100 \u043e\u0447\u043a\u043e\u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Apache Camel, \u043e\u043d\u0438 \u0434\u0430\u0436\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u043e\u0448\u043b\u0438 Spring Integration. \u0417\u0434\u0435\u0441\u044c \u0431\u044b\u043b\u043e \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0435 4,2 \u0442\u044b\u0441. \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u2014 \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0438\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430 1 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0435.<\/p>\n<\/li>\n<li>\n<p>Camunda \u0431\u0435\u0437 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0438 in-memory \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.\u00a0<\/p>\n<\/li>\n<li>\n<p>Zeebe \u0434\u0430\u0436\u0435 \u0431\u0435\u0437 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0435 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0441\u043a\u0440\u043e\u043c\u0435\u043d \u2014 \u043a\u0430\u043a \u0438 \u043e\u0436\u0438\u0434\u0430\u043b\u043e\u0441\u044c.<\/p>\n<\/li>\n<\/ol>\n<p>\u0412\u0441\u0435 \u0432\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u043f\u0440\u0438 \u043f\u043e\u043b\u043d\u043e\u043c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u044d\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u043c \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<\/p>\n<h3>\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043a\u0430\u043a\u0438\u0435 \u0442\u0430\u0441\u043a\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0438\u0441\u044c \u0438 \u043a\u0430\u043a\u0438\u0435 \u0431\u044b\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u2014 \u0438\u043b\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0433\u043e\u0432\u043e\u0440\u044f \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0445 Zeebe.<\/p>\n<h4>Camunda<\/h4>\n<p>Camunda \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u044b\u0435 SQL-\u0431\u0430\u0437\u044b. \u041a\u0430\u043d\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0434\u043b\u044f Camunda \u0431\u0430\u0437\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f PostgreSQL \u2014 \u044d\u0442\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0447\u0430\u0441\u0442\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043d\u0430\u0448\u0435\u043c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0435.<\/p>\n<p>\u0411\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432 \u0432\u0438\u0434\u0435 \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u0434\u043e\u043a\u0435\u0440 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u0442\u0443\u0442 \u0432\u0441\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e:<\/p>\n<pre><code class=\"pgsql\">docker run -d --name postgres -e POSTGRES_PASSWORD=postgres -p 5432:5432 postgres<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u043f\u0430\u043f\u043a\u0443 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440:<\/p>\n<pre><code class=\"pgsql\">-v \u0432\u0430\u0448\u0430_\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f_\u043f\u0430\u043f\u043a\u0430_\u0441_\u0434\u0430\u043d\u043d\u044b\u043c\u0438:\/var\/lib\/postgresql\/data<\/code><\/pre>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u043c\u044b \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0432 pure-camunda \u043d\u0430 PostgreSQL.<\/p>\n<h4>Zeebe<\/h4>\n<p>\u0412 Zeebe \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440 \u0434\u043b\u044f ElasticSearch. \u0414\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 Elastic \u043f\u043e\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432 Zeebe:Operate (\u0430\u043d\u0430\u043b\u043e\u0433 Camunda Cockpit). \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c ElasticSearch \u0442\u043e\u0436\u0435 \u0447\u0435\u0440\u0435\u0437 docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440. \u0414\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u044b, \u0447\u0442\u043e\u0431\u044b Zeebe \u0438 ElasticSearch \u043c\u043e\u0433\u043b\u0438 \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e.<\/p>\n<pre><code class=\"pgsql\">docker run -d --name elastic --network host -e \"discovery.type=single-node\" elasticsearch:7.14.2\u00a0<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u043f\u0430\u043f\u043a\u0443 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440:<\/p>\n<pre><code class=\"pgsql\">-v \u0432\u0430\u0448\u0430_\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f_\u043f\u0430\u043f\u043a\u0430_\u0441_\u0434\u0430\u043d\u043d\u044b\u043c\u0438:\/usr\/share\/elasticsearch\/data<\/code><\/pre>\n<p>\u0412 \u0441\u0430\u043c\u043e\u043c Zeebe \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440 \u0432 ElasticSearch:<\/p>\n<pre><code class=\"pgsql\">docker run -d --name zeebe --network host -e  ZEEBE_BROKER_EXPORTERS_ELASTICSEARCH_CLASSNAME=io.camunda.zeebe.exporter.ElasticsearchExporter -e  ZEEBE_BROKER_EXPORTERS_ELASTICSEARCH_ARGS_URL=http:\/\/localhost:9200 -e  ZEEBE_BROKER_EXPORTERS_ELASTICSEARCH_ARGS_BULK_SIZE=1000 -e  ZEEBE_BROKER_CLUSTER_PARTITIONSCOUNT=24 camunda\/zeebe <\/code><\/pre>\n<p>\u0418\u0437 \u043d\u043e\u0432\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0440\u0435\u0434\u044b:<\/p>\n<ul>\n<li>\n<p><code>ZEEBE_BROKER_EXPORTERS_ELASTICSEARCH_CLASSNAME<\/code> \u2014 \u0442\u0438\u043f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u0430<\/p>\n<\/li>\n<li>\n<p><code>ZEEBE_BROKER_EXPORTERS_ELASTICSEARCH_ARGS_URL<\/code> \u2014 \u0430\u0434\u0440\u0435\u0441 ElasticSearch<\/p>\n<\/li>\n<li>\n<p><code>ZEEBE_BROKER_EXPORTERS_ELASTICSEARCH_ARGS_BULK_SIZE<\/code> \u2014 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0430\u0447\u043a\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439<\/p>\n<\/li>\n<\/ul>\n<p>\u0410 \u0432\u043e\u0442 \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/919\/0a5\/969\/9190a59696affab79725c84090166961.png\" width=\"1246\" height=\"420\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/919\/0a5\/969\/9190a59696affab79725c84090166961.png\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6b2\/36a\/18c\/6b236a18c6c262603ba4bd09981625ce.png\" alt=\"Chart\" title=\"Chart\" width=\"1200\" height=\"742\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6b2\/36a\/18c\/6b236a18c6c262603ba4bd09981625ce.png\"\/><figcaption>Chart<\/figcaption><\/figure>\n<p>\u041e\u0431\u044a\u044f\u0441\u043d\u044e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b:<\/p>\n<ol>\n<li>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441 Camunda \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u0441\u0438\u043b\u044c\u043d\u043e, \u0443\u0445\u0443\u0434\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u0438 \u0432 \u0442\u0440\u0438 \u0440\u0430\u0437\u0430. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0438\u0434\u0435\u0442 \u0434\u0435\u0433\u0440\u0430\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0431\u0430\u0437\u0435. \u042d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c, \u0441 \u0440\u0435\u0431\u0438\u043b\u0434\u043e\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Camunda \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p>\u0410 \u0432\u043e\u0442 \u0443 Zeebe \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c \u2014 \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u043e\u043a\u0430\u0437\u0430\u043b \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u043a\u0440\u043e\u043c\u043d\u044b\u0439, \u043d\u043e \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439.\u00a0<\/p>\n<\/li>\n<\/ol>\n<p>\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u0447\u043a\u0430\u043c\u0438 \u043f\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0443, \u043b\u0438\u0431\u043e \u043f\u043e \u043c\u0435\u0440\u0435 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0439 \u043f\u0430\u0447\u043a\u0438. \u0417\u0434\u0435\u0441\u044c \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u044d\u0444\u0444\u0435\u043a\u0442:<\/p>\n<ul>\n<li>\n<p>\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432\u044b\u043d\u0435\u0441\u0435\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0438\u043d\u0433\u0430. \u0415\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u0434\u0440\u0443\u0433 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0443\u0442 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u2014 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0438\u043d\u0433 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0438\u0434\u0435\u0442 \u0441\u0432\u043e\u0438\u043c \u0447\u0435\u0440\u0435\u0434\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043e\u0431\u044a\u0435\u043c\u0430\u043c\u0438 (batch mode) \u043f\u043e\u0447\u0442\u0438 \u0432 \u043b\u044e\u0431\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435, \u0447\u0435\u043c \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<\/li>\n<\/ul>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0433\u0438\u0431\u0440\u0438\u0434\u0430 bpm-light<\/h3>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0434\u0443\u043c\u0430\u0435\u043c, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0431\u044b\u043b\u0430:<\/p>\n<ul>\n<li>\n<p>\u0422\u0430\u043a\u0430\u044f \u0436\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u0430\u044f, \u043a\u0430\u043a Zeebe<\/p>\n<\/li>\n<li>\n<p>\u0411\u044b\u0441\u0442\u0440\u0430\u044f \u043a\u0430\u043a in-memory Camunda. \u041b\u0443\u0447\u0448\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c Apache Camel, \u043d\u043e \u044d\u0442\u043e \u043c\u0435\u0447\u0442\u044b \ud83d\ude42<\/p>\n<\/li>\n<li>\n<p>\u0421 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0442\u043e\u0431\u044b \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u0438\u0434\u043d\u043e, \u043a\u0430\u043a \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043f\u0440\u043e\u0446\u0435\u0441\u0441.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u043a\u0430\u043a \u0432 \u0444\u0438\u043b\u044c\u043c\u0435 \u00ab\u041c\u0430\u0440\u0441\u0438\u0430\u043d\u0438\u043d\u00bb \u0441\u043d\u0438\u043c\u0430\u043b\u0438 \u0441 \u0440\u0430\u043a\u0435\u0442\u044b \u0432\u0441\u0435 \u043d\u0435\u043d\u0443\u0436\u043d\u043e\u0435?<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3b0\/b1a\/066\/3b0b1a0666e91d01242a9f78e38728c6.png\" width=\"1053\" height=\"541\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3b0\/b1a\/066\/3b0b1a0666e91d01242a9f78e38728c6.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0418\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u043c\u0441\u044f \u043e\u0442 \u0442\u044f\u0436\u0435\u043b\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0438\u0436\u043e\u043a Camunda.<\/p>\n<p>\u0412 \u0441\u043e\u0441\u0442\u0430\u0432 pom \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b:<\/p>\n<ul>\n<li>\n<p>Spring boot, spring data \u0438 web-services<\/p>\n<\/li>\n<li>\n<p>\u0422\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0434\u0443\u043b\u044c \u0434\u0432\u0438\u0436\u043a\u0430 Camunda:<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"pgsql\">docker run -d --name zeebe --network host -e  ZEEBE_BROKER_EXPORTERS_ELASTICSEARCH_CLASSNAME=io.camunda.zeebe.exporter.ElasticsearchExporter -e  ZEEBE_BROKER_EXPORTERS_ELASTICSEARCH_ARGS_URL=http:\/\/localhost:9200 -e  ZEEBE_BROKER_EXPORTERS_ELASTICSEARCH_ARGS_BULK_SIZE=1000 -e  ZEEBE_BROKER_CLUSTER_PARTITIONSCOUNT=24 camunda\/zeebe<\/code><\/pre>\n<ul>\n<li>\n<p>\u0414\u0440\u0430\u0439\u0432\u0435\u0440\u044b \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 h2, clickhouse<\/p>\n<\/li>\n<li>\n<p>\u0421\u0440\u0435\u0434\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0431\u0430\u0437\u044b flyway<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0418\u0437 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e (\u043d\u0430\u0434\u0435\u044e\u0441\u044c):<\/strong><\/p>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0434\u0432\u0438\u0436\u043a\u0430 Camunda. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <code>StandaloneInMemProcessEngineConfiguration<\/code> \u2014 \u0434\u0443\u043c\u0430\u044e, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u0441\u0430\u043c\u043e \u0437\u0430 \u0441\u0435\u0431\u044f:<\/p>\n<pre><code class=\"java\">@Bean public ProcessEngine processEngine(@Autowired RestDelegate restDelegate,                                   @Autowired ExporterRegistryService exporterRegistryService) {    final StandaloneInMemProcessEngineConfiguration config = new StandaloneInMemProcessEngineConfiguration();    \/\/ \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u043e\u043b\u043d\u043e\u0435 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, full \u2014 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435    config.setHistory(\"full\");    config.setDatabaseSchemaUpdate(\"create\");    \/\/ \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u0431\u043e\u0440 \u043c\u0435\u0442\u0440\u0438\u043a    config.setMetricsEnabled(false);    config.setDbMetricsReporterActivate(false);    \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u0438\u043d\u0430 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u0430    config.setBeans(new HashMap&lt;>());    config.getBeans().put(\"restDelegate\", restDelegate);    \/\/ \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 (\u0441\u0442\u0430\u0440\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u044d\u0442\u0430\u043f\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u043a\u043e\u043d\u0435\u0446 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u0442\u043f)    config.setHistoryEventHandler(new CustomHistoryHandler(exporterRegistryService));    config.setIdGenerator(new StrongUuidGenerator());    return config.buildProcessEngine(); } <\/code><\/pre>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 <code>CustomHistoryHandler<\/code>:<\/p>\n<pre><code class=\"java\">@Override public void handleEvent(HistoryEvent historyEvent) {    if (historyEvent.getClass().equals(HistoricProcessInstanceEventEntity.class)) {        final HistoricProcessInstanceEventEntity event = (HistoricProcessInstanceEventEntity) historyEvent;        \/\/ \u043b\u043e\u0433\u0438\u0440\u0443\u0435\u043c \u043d\u0430\u0447\u0430\u043b\u043e \u0438 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430        if (\"start\".equals(event.getEventType())) {            exporterRegistryService.registerStartProcess(event.getStartTime(), event.getProcessDefinitionKey(),                    event.getProcessDefinitionId(), event.getBusinessKey(), event.getProcessInstanceId(),                    event.getSuperProcessInstanceId());            return;        }        if (\"end\".equals(event.getEventType())) {            exporterRegistryService.registerEndProcess(event.getEndTime(), event.getProcessDefinitionKey(),                    event.getProcessDefinitionId(), event.getBusinessKey(), event.getProcessInstanceId(),                    event.getSuperProcessInstanceId());            return;        }    } <\/code><\/pre>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0447\u0430\u043b\u043e \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. \u0417\u0434\u0435\u0441\u044c \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u044b\u043c \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u0434\u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0445\u0440\u0430\u043d\u0438\u043c.<\/p>\n<p>\u0418\u0434\u0435\u044e \u0441 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u043e\u0437\u0430\u0438\u043c\u0441\u0442\u0432\u0443\u0435\u043c \u0443 Zeebe. \u0411\u0443\u0434\u0435\u043c \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432 <code>LinkedBlockingQueue<\/code>.<\/p>\n<pre><code class=\"java\">\/\/ \u041d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432 LinkedBlockingQueue \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0442\u0438\u043f\u0443 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 public void export(ExportRecordType type, ExportRecord exportRecord) {    if (enabled) {        if (! this.exportLog.containsKey(type)) {            this.exportLog.put(type, new LinkedBlockingQueue&lt;>());        }        this.exportLog.get(type).add(exportRecord);         \/\/ \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u0447\u043a\u0438, \u043c\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f        if (this.exportLog.get(type).size() >= this.batchSize) {            flush(type);        }    } }  \/\/ \u041f\u043e\u043b\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u0441\u0435\u0445 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f private void flushBatchTask() {    fullFlush();    scheduleFlushBatchTask(); } private void fullFlush() {    exportLog.entrySet().stream()        .forEach( x -> {            if (x.getValue() != null &amp;&amp; ! x.getValue().isEmpty()) {                flush(x.getKey());            }        }); }  \/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0443 private void scheduleFlushBatchTask() {    executor.schedule(this::flushBatchTask, interval, TimeUnit.SECONDS); }  \/\/ \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043b\u0438\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f private void flush(ExportRecordType type) {    if (! isRunning) {        isRunning = true;        exporter.export(type, exportLog.get(type));        isRunning = false;    } else {        logger.debug(\"\u0421\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430, \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u043d\u0435 \u0443\u0441\u043f\u0435\u0432\u0430\u0435\u0442\");    } } <\/code><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434 <code>*.export<\/code> \u0432\u044b\u043d\u0435\u0441\u0435\u043d \u043a\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f. \u0422\u0430\u043a \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432 Zeebe, \u043c\u044b \u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0437\u0430\u0438\u043c\u0441\u0442\u0432\u0443\u0435\u043c \u044d\u0442\u043e\u0442 \u043f\u0440\u0438\u043d\u0446\u0438\u043f. \u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u043c spring-boot.<\/p>\n<p>\u0414\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0442\u0440\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u0430:<\/p>\n<ul>\n<li>\n<p><strong>\u0412 \u043a\u0430\u043d\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 H2.<\/strong> \u041d\u0430 \u043d\u0435\u0439 \u043b\u0435\u0433\u043a\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438<\/p>\n<\/li>\n<li>\n<p><strong>\u0412 ElasticSearch.<\/strong> \u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0431\u044b\u0441\u0442\u0440\u044b\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0442\u043e\u0440\u043e\u0432 json-\u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435<\/p>\n<\/li>\n<li>\n<p><strong>\u0412 Clickhouse.<\/strong> \u042d\u0442\u0430 \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0441\u0435\u0431\u044f \u0437\u0430\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043b\u0430 \u043f\u0440\u0438 \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0432\u0441\u0442\u0430\u0432\u043a\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u2014 \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 h2:<\/p>\n<pre><code class=\"java\">@Override public void export(ExportRecordType exportRecordType, BlockingQueue&lt;ExportRecord> records) { .. \/\/ \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 sql \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043d\u0430\u0431\u043e\u0440 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432    switch (exportRecordType) { ..        case PROCESS:            queryString = \"insert into PROCESS \"                    + \"(CREATED, PROCESSDEFINITIONKEY, PROCESSDEFINITIONID, BUSINESSKEY, PROCESSINSTANCEID, \"                    + \"SUPERPROCESSINSTANCEID, LIFECYCLETYPE,ENDDATE) values \";            valuesString = \"(?,?,?,?,?,?,?,?)\";            break; ..    } \/\/ \u0432\u044b\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 LinkedBlockingQueue \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0434\u0438\u043d \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438     while (! records.isEmpty()) {        final ExportRecord recordElement = records.poll();        itemsAdded++;        switch (exportRecordType) { ..            case PROCESS:                Process process = (Process) recordElement;                parameters.add(process.getDate());                parameters.add(process.getProcessDefinitionKey());                parameters.add(process.getProcessDefinitionId());                parameters.add(process.getBusinessKey());                parameters.add(process.getProcessInstanceId());                parameters.add(process.getSuperProcessInstanceId());                parameters.add(process.getLifecycleType().name());                parameters.add(process.getEndDate());                break; ..        }    }    if (itemsAdded > 0 &amp;&amp; ! parameters.isEmpty()) {        String query = queryString + (valuesString + \",\").repeat(itemsAdded);        query = query.substring(0, query.length() - 1);        execute(query, parameters);    } } <\/code><\/pre>\n<p>\u0421\u0430\u043c \u0436\u0435 \u043c\u0435\u0442\u043e\u0434 <code>execute<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432 jdbc-\u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u0438\u043f\u0430 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441:<\/p>\n<pre><code class=\"java\">private void execute(String query, List&lt;Object> parameters) {    try (PreparedStatement statement = databaseConnectionService.getConnection()            .prepareStatement(query)) {        for (int i=0; i&lt;parameters.size(); i++) {            if (parameters.get(i) instanceof String) {                statement.setString(i+1, String.valueOf(parameters.get(i)));            }            if (parameters.get(i) instanceof Long) {                statement.setLong(i+1, (Long) parameters.get(i));            } ..            if (parameters.get(i) == null) {                statement.setString(i+1, null);            }        }        \/\/ \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441        statement.execute();    } catch (Exception ex) {        logger.error(ex.getMessage(), ex);    } } <\/code><\/pre>\n<p>\u0424\u0440\u043e\u043d\u0442 \u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0442\u043e\u0436\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c rest-api \u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fb8\/670\/69b\/fb867069be3bfd833eff472cd3f9038f.png\" width=\"1600\" height=\"548\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fb8\/670\/69b\/fb867069be3bfd833eff472cd3f9038f.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0424\u0440\u043e\u043d\u0442 \u0441\u0434\u0435\u043b\u0430\u043d \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e, \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442:<\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 bpmn-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b<\/p>\n<\/li>\n<li>\n<p>\u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u044b<\/p>\n<\/li>\n<li>\n<p>\u0412\u0438\u0434\u0435\u0442\u044c \u043f\u0443\u0442\u044c \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430, \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u0442\u0430\u0439\u043c\u0438\u043d\u0433\u0438 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u0437\u0430\u0434\u0430\u0447.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442 \u0444\u0440\u043e\u043d\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 jsf primefaces \u0438 bpmn.io \u0434\u043b\u044f \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430 \u0441\u0430\u043c\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0437\u0434\u0435\u0441\u044c:<\/p>\n<p><a href=\"https:\/\/gitlab.com\/tune-bpm\/bpm-light\"><u>\u041a\u043e\u0434 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/u><\/a><\/p>\n<p><a href=\"https:\/\/gitlab.com\/tune-bpm\/bpm-light-front\"><u>\u041a\u043e\u0434 \u0444\u0440\u043e\u043d\u0442 \u0447\u0430\u0441\u0442\u0438<\/u><\/a><\/p>\n<p><strong>\u0412\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0438 \u0434\u0430\u0434\u0438\u043c \u0442\u0430\u043a\u0443\u044e \u0436\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0430 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f:<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/73a\/07e\/266\/73a07e26641e1fe946f70312c090cecb.png\" width=\"1240\" height=\"696\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/73a\/07e\/266\/73a07e26641e1fe946f70312c090cecb.png\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/173\/3cc\/915\/1733cc915a252b340a509b4365013fc4.png\" alt=\"Chart\" title=\"Chart\" width=\"1200\" height=\"742\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/173\/3cc\/915\/1733cc915a252b340a509b4365013fc4.png\"\/><figcaption>Chart<\/figcaption><\/figure>\n<p><u>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b:<\/u><\/p>\n<ol>\n<li>\n<p>\u041d\u0430 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0441\u0435\u0431\u044f Elastic, \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e \u043e\u0431\u043e\u0433\u043d\u0430\u0432 Clickhouse. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b h2 \u0442\u043e\u0436\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0438\u043b\u0438 \u0431\u044b, \u0435\u0441\u043b\u0438 \u0431\u044b \u043d\u0435 \u043e\u0434\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043d\u043e: \u0431\u0435\u0437 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u043d\u0430 \u0442\u0430\u043a\u043e\u0439 \u0431\u0430\u0437\u0435 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0442\u0443\u043f\u0438\u0442\u044c \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 5 \u0442\u044b\u0441. \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u0434\u0430 \u0438 \u0444\u0440\u043e\u043d\u0442 \u0443\u0436\u0435 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0435\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c. \u0412 \u043e\u0431\u0449\u0435\u043c, \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u0431\u0430\u0437\u0430 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432, \u043d\u043e \u043d\u0435 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0436\u0438\u0437\u043d\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0412\u0430\u0436\u043d\u043e\u0439 \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u0433\u0438\u0431\u0440\u0438\u0434 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432 \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u043e\u0432 \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0437\u0430 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u043c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 (eureka, nginx \u0438 \u0442\u043f). \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u0447\u0442\u043e \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u043c\u0438\u043d\u0443\u0441 \u2014 \u043d\u0435\u043f\u0435\u0440\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u043e\u0432. \u0421\u0430\u043c\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0438\u0434\u0443\u0442 \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430\u043c \u043c\u043e\u0433\u0443\u0442 \u043d\u0435 \u0443\u0441\u043f\u0435\u0442\u044c \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<\/li>\n<\/ol>\n<h3>\u0418\u0442\u043e\u0433\u0438<\/h3>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/44b\/8ae\/b2e\/44b8aeb2e64eb347241083833354a35c.png\" width=\"1240\" height=\"798\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/44b\/8ae\/b2e\/44b8aeb2e64eb347241083833354a35c.png\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7dc\/640\/6cb\/7dc6406cbf5e9db54aae4b8750e1f04f.png\" width=\"1242\" height=\"698\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7dc\/640\/6cb\/7dc6406cbf5e9db54aae4b8750e1f04f.png\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/04a\/661\/d39\/04a661d39c8dee2454e932351c824d29.png\" alt=\"Chart\" title=\"Chart\" width=\"1200\" height=\"742\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/04a\/661\/d39\/04a661d39c8dee2454e932351c824d29.png\"\/><figcaption>Chart<\/figcaption><\/figure>\n<p><strong>\u0418\u0442\u0430\u043a, \u043f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438:<\/strong><\/p>\n<p><em>\u041a\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u2014 Camunda \u0438\u043b\u0438 Zeebe?<\/em><\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u0438 \u0440\u0430\u0432\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0432\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 Camunda. \u041d\u043e \u043f\u0440\u0438 \u043c\u0430\u0440\u0430\u0444\u043e\u043d\u0435 \u0441 \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u0435\u043c \u0431\u0430\u0437\u044b \u0440\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e Camunda \u0443\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0435\u0433\u0440\u0430\u0434\u0430\u0446\u0438\u044e \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0442\u044c\u0441\u044f. Zeebe \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u0441 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0441\u043a\u0440\u043e\u043c\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u0437\u0430\u0442\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0435\u0434\u0435\u043b\u043e\u0432 \u0434\u043b\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.\u00a0<\/p>\n<\/li>\n<\/ul>\n<p><em>\u0410 \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u0438 \u0432 \u043a\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445?<\/em><\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u0438 \u0440\u0430\u0432\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0432 \u0432\u0438\u0434\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u0438, Camunda \u043f\u043e\u0447\u0442\u0438 \u0432 15 \u0440\u0430\u0437 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c Zeebe. \u041f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c Camunda \u0440\u0435\u0437\u043a\u043e \u043f\u0430\u0434\u0430\u0435\u0442 \u2014 \u043f\u043e\u0447\u0442\u0438 \u0432 \u0442\u0440\u0438 \u0440\u0430\u0437\u0430, \u0430 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0443 Zeebe \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0430\u0434\u043a\u0438 \u043d\u0435 \u0434\u0430\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0448\u0430\u0433\u043e\u0432 \u0434\u0430\u0436\u0435 Camunda \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0446\u0435\u043b\u0435\u0441\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0439. \u0412 \u044d\u0442\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043b\u0443\u0447\u0448\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c Apache Camel \u0438\u043b\u0438 Spring Integration \u2014 \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435.<\/p>\n<\/li>\n<li>\n<p>Zeebe \u043d\u0443\u0436\u043d\u0430 \u0434\u043b\u044f \u0441\u043e\u0432\u0441\u0435\u043c \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u0438 \u0432\u044b\u0441\u043e\u043a\u043e\u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 (\u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u0438 \u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u043c\u0438), \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u0442\u044c \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0446\u0435\u043b\u0435\u0441\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u043c. \u0414\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u043e\u0432 \u0438 \u0431\u044b\u0441\u0442\u0440\u044b\u043c\u0438 \u0434\u0438\u0441\u043a\u0430\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u0431\u044e\u0434\u0436\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d, \u043d\u043e \u0435\u0441\u0442\u044c \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c, \u043b\u0443\u0447\u0448\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0433\u0438\u0431\u0440\u0438\u0434 \u2014 \u043e\u0442\u0443\u0447\u0438\u0442\u044c Camunda \u043e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<\/li>\n<\/ul>\n<p><em>\u0417\u0430 \u0441\u0447\u0435\u0442 \u0447\u0435\u0433\u043e \u043c\u043e\u0436\u0435\u0442 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442\u044c?<\/em><\/p>\n<ul>\n<li>\n<p>Camunda \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442 \u0438\u0437-\u0437\u0430 \u0441\u0432\u043e\u0435\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u2014 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445. \u042d\u0442\u043e \u043a\u0440\u0443\u0442\u0430\u044f \u0444\u0438\u0447\u0430, \u043e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u043e\u0442\u043a\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0443\u0436\u043d\u044b\u0439 \u044d\u0442\u0430\u043f, \u043d\u043e \u044d\u0442\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u043f\u0440\u043e hi-load.<\/p>\n<\/li>\n<li>\n<p>Zeebe \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442 \u0438\u0437-\u0437\u0430 \u0441\u0432\u043e\u0435\u0433\u043e \u044f\u0434\u0440\u0430 \u2014 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 rockdb. \u0414\u043b\u044f \u043d\u0435\u0435 \u043d\u0443\u0436\u043d\u044b \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u044b\u0435 \u0434\u0438\u0441\u043a\u0438 \u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0439 \u0438 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p><a href=\"https:\/\/gitlab.com\/tune-bpm\"><u>\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043a\u043e\u0434 \u0433\u0440\u0443\u043f\u043f\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432<\/u><\/a><\/p>\n<p>\u041a\u043e\u043b\u043b\u0435\u0433\u0438, \u0430 \u043a\u0430\u043a \u0432\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c Camunda \u0438 Zeebe? \u041f\u043e\u0434\u0435\u043b\u0438\u0442\u0435\u0441\u044c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445!<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \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\/594117\/\"> https:\/\/habr.com\/ru\/articles\/594117\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p><strong>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041d\u0438\u043a\u043e\u043b\u0430\u0439 \u041f\u0435\u0440\u0432\u0443\u0445\u0438\u043d, \u044f Senior Java Developer \u0432 \u0420\u0430\u0439\u0444\u0444\u0430\u0439\u0437\u0435\u043d\u0431\u0430\u043d\u043a\u0435. \u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c BPM-\u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438 Camunda \u0438 Zeebe (\u043e\u0441\u043d\u043e\u0432\u0430 Camunda-cloud). \u0415\u0441\u043b\u0438 \u0432\u044b, \u043a\u0430\u043a \u0438 \u044f, \u0441 \u0445\u043e\u0434\u0443 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u2014 Camunda \u0438\u043b\u0438 Zeebe, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u0438 \u0432 \u043a\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442\u044c, \u2014 \u0442\u043e \u0432\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e.<\/strong><\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u044f \u043f\u043e\u043f\u044b\u0442\u0430\u044e\u0441\u044c \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c Camunda \u0438 Zeebe \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \u043a\u043e\u0441\u043d\u0443\u0441\u044c \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u043f\u043e workflow \u2014 Apache Camel \u0438 Spring Integration, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0427\u0430\u0441\u0442\u043e \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0431\u0438\u0437\u043d\u0435\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043b\u044b\u0448\u0430\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0435\u0442 \u2014 \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u043b\u0438 \u043d\u0430\u0448\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441 \u044d\u0442\u0438\u043c. \u0412\u043e\u0442 \u0438 \u043c\u043d\u0435 \u0441\u0442\u0430\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u043c workflow: \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0438 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u043c rest-\u0432\u044b\u0437\u043e\u0432 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u043d\u0438\u0445.<\/p>\n<p>\u0412\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b <code>test.json<\/code> \u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c: <code>{}<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 nginx.<\/p>\n<p>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0431 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0438: \u0432 \u043c\u043e\u0435\u043c \u0440\u0430\u0441\u043f\u043e\u0440\u044f\u0436\u0435\u043d\u0438\u0438 4\u0445 \u044f\u0434\u0435\u0440\u043d\u044b\u0439 Intel(R) Core(TM) i7-4770K CPU @ 3.50GHz, SSD \u0434\u0438\u0441\u043a \u0438 24Gb \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043d\u0430\u0448\u0438 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u044b:<\/p>\n<h3>Apache-camel \u2014 \u0447\u0435\u043c\u043f\u0438\u043e\u043d, \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c<\/h3>\n<p>\u041f\u0440\u0438\u0437\u043d\u0430\u044e\u0441\u044c, \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 BPM. \u041d\u043e \u044d\u0442\u043e\u0442 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u0435\u043d, \u0447\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u0434\u043b\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0432 \u0442\u0435\u043c\u0435 BPMN, \u0438 \u0435\u0433\u043e \u0433\u043b\u0430\u0437\u0430 \u0432\u0441\u043f\u044b\u0445\u0438\u0432\u0430\u044e\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435\u043c \u2014 \u044d\u0442\u043e \u0436\u0435 \u043f\u0440\u043e Apache Camel! \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0437\u0430\u0434\u0430\u0447\u0443 \u043e\u043d \u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u043e\u0445\u043e\u0436\u0443\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0433\u043e \u0441 \u0434\u043e\u043b\u0436\u043d\u044b\u043c \u0443\u0432\u0430\u0436\u0435\u043d\u0438\u0435\u043c.<\/p>\n<p>\u0412\u043e\u0442 \u0432\u043e\u0440\u043a\u0444\u043b\u043e\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c:<\/p>\n<pre><code class=\"java\">camelContext.addRoutes(new RouteBuilder() {     @Override    public void configure() throws Exception {        from(\"direct:tuneBPMN\")                .bean(\"restExecutorService\", \"doRestRequest\")                .bean(\"restExecutorService\", \"doRestRequest\");    } });<\/code><\/pre>\n<p>\u0411\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 REST-\u0432\u044b\u0437\u043e\u0432:<\/p>\n<pre><code class=\"java\">public void doRestRequest() {    final String result = restTemplate.getForObject(restRequestUrl + \"?v=\" + random.nextLong(), String.class);    logger.debug(result); } <\/code><\/pre>\n<p><code>random.nextLong<\/code> \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. <a href=\"https:\/\/gitlab.com\/tune-bpm\/pure-apache-camel\">\u0421\u0441\u044b\u043b\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 gitlab<\/a><\/p>\n<h3>Spring Integration \u2014 \u0447\u0430\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0431\u0440\u0430\u0442\u0430\u00a0<\/h3>\n<p>\u0421 \u0440\u043e\u0441\u0442\u043e\u043c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u0438 Spring \/ Spring boot \u0437\u043d\u0430\u0447\u0438\u043c\u043e\u0441\u0442\u044c Apache Camel \u0441\u043d\u0438\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 Spring Integration. \u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0442\u043e\u0436\u0435 \u043d\u0435 BPM, \u043d\u043e \u043d\u0430\u043c \u0432\u0430\u0436\u043d\u044b \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0414\u043b\u044f \u043b\u0443\u0447\u0448\u0435\u0439 \u0441\u0445\u043e\u0436\u0435\u0441\u0442\u0438 \u0441 BPMN \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432\u043e\u0440\u043a\u0444\u043b\u043e\u0443 (\u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430) \u0432 \u0432\u0438\u0434\u0435 xml, \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0434\u0432\u0430 \u043a\u0430\u043d\u0430\u043b\u0430 \u0438 \u0434\u0432\u0430 \u0441\u0435\u0440\u0432\u0438\u0441 \u0430\u043a\u0442\u0438\u0432\u0430\u0442\u043e\u0440\u0430:<\/p>\n<pre><code class=\"java\">&lt;int:channel id=\"channelStart\"\/> &lt;int:channel id=\"channelAfterRestA\"\/>  &lt;int:gateway default-request-channel=\"channelStart\"             service-interface=\"net.pervukhin.purespringintegration.integrationcomponent.StarterGateway\"\/>  &lt;int:service-activator        input-channel=\"channelStart\"        output-channel=\"channelAfterRestA\"        ref=\"restServiceActivator\"        method=\"restA\"\/> &lt;int:service-activator        input-channel=\"channelAfterRestA\"        ref=\"restServiceActivator\"        method=\"restB\"\/><\/code><\/pre>\n<p><a href=\"https:\/\/gitlab.com\/tune-bpm\/pure-spring-integration\">\u0421\u0441\u044b\u043b\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 gitlab<\/a><\/p>\n<h3>Camunda \u2014 \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439, \u043a\u0430\u043a DasAuto<\/h3>\n<p>\u041f\u043e\u043a\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0430\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 Camunda \u2014 \u043c\u044b \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043c \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0432\u043e\u043e\u0431\u0449\u0435, \u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c in-memory h2 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u041d\u0430\u0448 \u00ab\u0441\u043b\u043e\u0436\u043d\u044b\u0439\u00bb \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041a\u043e\u0434 \u0434\u043b\u044f RestDelegate \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442:<\/p>\n<pre><code class=\"java\">@Component public class RestDelegate implements JavaDelegate {    private static final Logger logger = LoggerFactory.getLogger(RestDelegate.class);    private static final Random random = new Random();    ...    @Override    public void execute(DelegateExecution execution) throws Exception {        final String result = restTemplate.getForObject(restRequestUrl + \"?v=\" + random.nextLong(), String.class);        logger.debug(result);    } } <\/code><\/pre>\n<p><a href=\"https:\/\/gitlab.com\/tune-bpm\/pure-camunda\">\u0421\u0441\u044b\u043b\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 gitlab<\/a>. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u044c h2mem.<\/p>\n<h3>Zeebe \u2014 \u0434\u0432\u0438\u0436\u043e\u043a \u0434\u043b\u044f \u0432\u044b\u0441\u043e\u043a\u0438\u0445 \u043d\u0430\u0433\u0440\u0443\u0437\u043e\u043a<\/h3>\n<p>Zeebe \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0434\u0430\u0432\u043d\u043e: \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043b\u0438\u0437, \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u044b\u0439 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0432\u044b\u0448\u0435\u043b \u0432 2019. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Camunda, \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u0443\u044e, \u0430 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u0431\u0430\u0437\u0443 rockdb \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c.\u00a0<\/p>\n<p>\u041f\u043e \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u0438\u044e \u0411\u0435\u0440\u043d\u0434\u0430 \u0420\u044e\u043a\u0435\u0440\u0430, \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432 \u043d\u0435\u0439 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u0443\u0442\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u043e\u0432 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0431\u044b\u043b\u043e \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435, <a href=\"https:\/\/www.youtube.com\/watch?v=OtpvavSnzVM\"><u>\u043a\u0441\u0442\u0430\u0442\u0438<\/u><\/a>.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0421\u0443\u0434\u044f \u043f\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0443, \u043f\u0440\u0438 \u043e\u0434\u043d\u043e\u043c \u0438\u043dc\u0442\u0430\u043d\u0441\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0435 1 \u0442\u044b\u0441. \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443.<\/p>\n<p>\u0411\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430\u0448 \u0432\u043e\u0440\u043a\u0435\u0440:<\/p>\n<pre><code class=\"java\">@ZeebeWorker(type = \"restJob\") public void handleJob(JobClient jobClient, ActivatedJob activatedJob) {    final String result = restTemplate.getForObject(restRequestUrl + \"?v=\" + random.nextLong(), String.class);    logger.debug(result);     ..     jobClient.newCompleteCommand(activatedJob.getKey())            .variables(new HashMap&lt;>())            .send()            .join(); } <\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 docker:<\/p>\n<pre><code class=\"pgsql\">docker run -d --name zeebe -e ZEEBE_BROKER_CLUSTER_PARTITIONSCOUNT=24 -p 26500:26500 camunda\/zeebe<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u043f\u0430\u043f\u043a\u0443 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440:<\/p>\n<pre><code class=\"pgsql\">-v \u0432\u0430\u0448\u0430_\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f_\u043f\u0430\u043f\u043a\u0430_\u0441_\u0434\u0430\u043d\u043d\u044b\u043c\u0438:\/usr\/local\/zeebe\/data<\/code><\/pre>\n<p>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0442\u044e\u043d\u0438\u043d\u0433 (\u0432 \u0440\u0430\u043c\u043a\u0430\u0445 1 \u0438\u0441\u043d\u0442\u0430\u043d\u0441\u0430):<\/p>\n<p><code>ZEEBE_BROKER_CLUSTER_PARTITIONSCOUNT<\/code> \u2014 \u0447\u0438\u0441\u043b\u043e \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044d\u0442\u043e 1) \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u043d\u0430 \u043a\u0430\u043a\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0447\u0430\u0441\u0442\u0435\u0439 \u0438\u043b\u0438 \u043f\u0430\u043f\u043e\u043a \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0442\u044c rockdb \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b SSD \u0438\u043b\u0438 \u0436\u0435\u0441\u0442\u043a\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0430, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u043b\u0443\u0447\u0448\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f 24, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u0435\u0442 \u0441\u043a\u043e\u0440\u0435\u0435 \u0443\u0445\u0443\u0434\u0448\u0435\u043d\u0438\u0435.<\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u0432\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043d\u0435 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0440\u043e\u043b\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439:<\/p>\n<ul>\n<li>\n<p><code>ZEEBE_BROKER_THREADS_CPUTHREADCOUNT (2)<\/code> \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u043d\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><code>ZEEBE_BROKER_THREADS_IOTHREADCOUNT (2)<\/code> \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u043b\u044f \u0432\u0432\u043e\u0434\u0430\/\u0432\u044b\u0432\u043e\u0434\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u044b \u0441\u0442\u0430\u0432\u0438\u043c \u0438\u0445 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u041a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f Zeebe \u0441 \u0432\u043e\u0440\u043a\u0435\u0440\u043e\u043c <a href=\"https:\/\/gitlab.com\/tune-bpm\/pure-zeebe\">\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 gitlab<\/a>.<\/p>\n<h3>\u0414\u0430\u0435\u043c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443<\/h3>\n<p>\u0414\u043b\u044f \u0437\u0430\u043c\u0435\u0440\u0430 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d \u0437\u0430\u043f\u0443\u0441\u043a 100 \u0442\u044b\u0441. \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c 10 \u0442\u044b\u0441. \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u043c\u0435\u0440\u044f\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u041f\u0440\u043e\u0448\u0443 \u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u043c\u0435\u043d\u044f \u0437\u0430 \u043d\u0435\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c, \u043d\u043e \u043d\u0430\u0447\u0430\u043b\u043e \u043e\u0442\u0441\u0447\u0435\u0442\u0430 \u0431\u0443\u0434\u0435\u043c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0441 0, \u0430 \u0441 1 \u0442\u044b\u0441. \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432. \u042d\u0442\u043e \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0446\u0435\u043d\u0438\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u043e\u0433\u0440\u0435\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption>Chart<\/figcaption><\/figure>\n<p><strong>\u041e\u0431\u044a\u044f\u0441\u043d\u044e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b:<\/strong><\/p>\n<ol>\n<li>\n<p>Apache Camel \u0438 Spring Integration \u0432\u043d\u0435 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0446\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0438 \u043d\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0447\u0438\u0432\u043e\u0441\u0442\u0438. \u0422\u0430\u043a \u0447\u0442\u043e +100 \u043e\u0447\u043a\u043e\u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Apache Camel, \u043e\u043d\u0438 \u0434\u0430\u0436\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u043e\u0448\u043b\u0438 Spring Integration. \u0417\u0434\u0435\u0441\u044c \u0431\u044b\u043b\u043e \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0435 4,2 \u0442\u044b\u0441. \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u2014 \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0438\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430 1 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0435.<\/p>\n<\/li>\n<li>\n<p>Camunda \u0431\u0435\u0437 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0438 in-memory \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.\u00a0<\/p>\n<\/li>\n<li>\n<p>Zeebe \u0434\u0430\u0436\u0435 \u0431\u0435\u0437 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0435 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0441\u043a\u0440\u043e\u043c\u0435\u043d \u2014 \u043a\u0430\u043a \u0438 \u043e\u0436\u0438\u0434\u0430\u043b\u043e\u0441\u044c.<\/p>\n<\/li>\n<\/ol>\n<p>\u0412\u0441\u0435 \u0432\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u043f\u0440\u0438 \u043f\u043e\u043b\u043d\u043e\u043c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u044d\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u043c \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<\/p>\n<h3>\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043a\u0430\u043a\u0438\u0435 \u0442\u0430\u0441\u043a\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0438\u0441\u044c \u0438 \u043a\u0430\u043a\u0438\u0435 \u0431\u044b\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u2014 \u0438\u043b\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0433\u043e\u0432\u043e\u0440\u044f \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0445 Zeebe.<\/p>\n<h4>Camunda<\/h4>\n<p>Camunda \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u044b\u0435 SQL-\u0431\u0430\u0437\u044b. \u041a\u0430\u043d\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0434\u043b\u044f Camunda \u0431\u0430\u0437\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f PostgreSQL \u2014 \u044d\u0442\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0447\u0430\u0441\u0442\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043d\u0430\u0448\u0435\u043c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0435.<\/p>\n<p>\u0411\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432 \u0432\u0438\u0434\u0435 \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u0434\u043e\u043a\u0435\u0440 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u0442\u0443\u0442 \u0432\u0441\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e:<\/p>\n<pre><code class=\"pgsql\">docker run -d --name postgres -e POSTGRES_PASSWORD=postgres -p 5432:5432 postgres<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u043f\u0430\u043f\u043a\u0443 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440:<\/p>\n<pre><code class=\"pgsql\">-v \u0432\u0430\u0448\u0430_\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f_\u043f\u0430\u043f\u043a\u0430_\u0441_\u0434\u0430\u043d\u043d\u044b\u043c\u0438:\/var\/lib\/postgresql\/data<\/code><\/pre>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u043c\u044b \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0432 pure-camunda \u043d\u0430 PostgreSQL.<\/p>\n<h4>Zeebe<\/h4>\n<p>\u0412 Zeebe \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440 \u0434\u043b\u044f ElasticSearch. \u0414\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 Elastic \u043f\u043e\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432 Zeebe:Operate (\u0430\u043d\u0430\u043b\u043e\u0433 Camunda Cockpit). \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c ElasticSearch \u0442\u043e\u0436\u0435 \u0447\u0435\u0440\u0435\u0437 docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440. \u0414\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u044b, \u0447\u0442\u043e\u0431\u044b Zeebe \u0438 ElasticSearch \u043c\u043e\u0433\u043b\u0438 \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e.<\/p>\n<pre><code class=\"pgsql\">docker run -d --name elastic --network host -e \"discovery.type=single-node\" elasticsearch:7.14.2\u00a0<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u043f\u0430\u043f\u043a\u0443 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440:<\/p>\n<pre><code class=\"pgsql\">-v \u0432\u0430\u0448\u0430_\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f_\u043f\u0430\u043f\u043a\u0430_\u0441_\u0434\u0430\u043d\u043d\u044b\u043c\u0438:\/usr\/share\/elasticsearch\/data<\/code><\/pre>\n<p>\u0412 \u0441\u0430\u043c\u043e\u043c Zeebe \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440 \u0432 ElasticSearch:<\/p>\n<pre><code class=\"pgsql\">docker run -d --name zeebe --network host -e  ZEEBE_BROKER_EXPORTERS_ELASTICSEARCH_CLASSNAME=io.camunda.zeebe.exporter.ElasticsearchExporter -e  ZEEBE_BROKER_EXPORTERS_ELASTICSEARCH_ARGS_URL=http:\/\/localhost:9200 -e  ZEEBE_BROKER_EXPORTERS_ELASTICSEARCH_ARGS_BULK_SIZE=1000 -e  ZEEBE_BROKER_CLUSTER_PARTITIONSCOUNT=24 camunda\/zeebe <\/code><\/pre>\n<p>\u0418\u0437 \u043d\u043e\u0432\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0440\u0435\u0434\u044b:<\/p>\n<ul>\n<li>\n<p><code>ZEEBE_BROKER_EXPORTERS_ELASTICSEARCH_CLASSNAME<\/code> \u2014 \u0442\u0438\u043f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u0430<\/p>\n<\/li>\n<li>\n<p><code>ZEEBE_BROKER_EXPORTERS_ELASTICSEARCH_ARGS_URL<\/code> \u2014 \u0430\u0434\u0440\u0435\u0441 ElasticSearch<\/p>\n<\/li>\n<li>\n<p><code>ZEEBE_BROKER_EXPORTERS_ELASTICSEARCH_ARGS_BULK_SIZE<\/code> \u2014 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0430\u0447\u043a\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439<\/p>\n<\/li>\n<\/ul>\n<p>\u0410 \u0432\u043e\u0442 \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption>Chart<\/figcaption><\/figure>\n<p>\u041e\u0431\u044a\u044f\u0441\u043d\u044e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b:<\/p>\n<ol>\n<li>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441 Camunda \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u0441\u0438\u043b\u044c\u043d\u043e, \u0443\u0445\u0443\u0434\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u0438 \u0432 \u0442\u0440\u0438 \u0440\u0430\u0437\u0430. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0438\u0434\u0435\u0442 \u0434\u0435\u0433\u0440\u0430\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0431\u0430\u0437\u0435. \u042d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c, \u0441 \u0440\u0435\u0431\u0438\u043b\u0434\u043e\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Camunda \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p>\u0410 \u0432\u043e\u0442 \u0443 Zeebe \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c \u2014 \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u043e\u043a\u0430\u0437\u0430\u043b \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u043a\u0440\u043e\u043c\u043d\u044b\u0439, \u043d\u043e \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439.\u00a0<\/p>\n<\/li>\n<\/ol>\n<p>\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u0447\u043a\u0430\u043c\u0438 \u043f\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0443, \u043b\u0438\u0431\u043e \u043f\u043e \u043c\u0435\u0440\u0435 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0439 \u043f\u0430\u0447\u043a\u0438. \u0417\u0434\u0435\u0441\u044c \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u044d\u0444\u0444\u0435\u043a\u0442:<\/p>\n<ul>\n<li>\n<p>\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432\u044b\u043d\u0435\u0441\u0435\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0438\u043d\u0433\u0430. \u0415\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u0434\u0440\u0443\u0433 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0443\u0442 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u2014 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0438\u043d\u0433 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0438\u0434\u0435\u0442 \u0441\u0432\u043e\u0438\u043c \u0447\u0435\u0440\u0435\u0434\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043e\u0431\u044a\u0435\u043c\u0430\u043c\u0438 (batch mode) \u043f\u043e\u0447\u0442\u0438 \u0432 \u043b\u044e\u0431\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435, \u0447\u0435\u043c \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<\/li>\n<\/ul>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0433\u0438\u0431\u0440\u0438\u0434\u0430 bpm-light<\/h3>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0434\u0443\u043c\u0430\u0435\u043c, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0431\u044b\u043b\u0430:<\/p>\n<ul>\n<li>\n<p>\u0422\u0430\u043a\u0430\u044f \u0436\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u0430\u044f, \u043a\u0430\u043a Zeebe<\/p>\n<\/li>\n<li>\n<p>\u0411\u044b\u0441\u0442\u0440\u0430\u044f \u043a\u0430\u043a in-memory Camunda. \u041b\u0443\u0447\u0448\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c Apache Camel, \u043d\u043e \u044d\u0442\u043e \u043c\u0435\u0447\u0442\u044b \ud83d\ude42<\/p>\n<\/li>\n<li>\n<p>\u0421 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0442\u043e\u0431\u044b \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u0438\u0434\u043d\u043e, \u043a\u0430\u043a \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043f\u0440\u043e\u0446\u0435\u0441\u0441.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u043a\u0430\u043a \u0432 \u0444\u0438\u043b\u044c\u043c\u0435 \u00ab\u041c\u0430\u0440\u0441\u0438\u0430\u043d\u0438\u043d\u00bb \u0441\u043d\u0438\u043c\u0430\u043b\u0438 \u0441 \u0440\u0430\u043a\u0435\u0442\u044b \u0432\u0441\u0435 \u043d\u0435\u043d\u0443\u0436\u043d\u043e\u0435?<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0418\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u043c\u0441\u044f \u043e\u0442 \u0442\u044f\u0436\u0435\u043b\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0438\u0436\u043e\u043a Camunda.<\/p>\n<p>\u0412 \u0441\u043e\u0441\u0442\u0430\u0432 pom \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b:<\/p>\n<ul>\n<li>\n<p>Spring boot, spring data \u0438 web-services<\/p>\n<\/li>\n<li>\n<p>\u0422\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0434\u0443\u043b\u044c \u0434\u0432\u0438\u0436\u043a\u0430 Camunda:<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"pgsql\">docker run -d --name zeebe --network host -e<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-394400","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/394400","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=394400"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/394400\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=394400"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=394400"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=394400"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}