Интегрируйте веб-приложение camunda в весенний реактивный проект

Можно ли интегрировать camunda-bpm-spring-boot-starter-webapp & camunda-bpm-spring-boot-starter-rest в реактивный проект весенней загрузки?

Я попытался просто интегрировать пакеты. Но при запуске проекта я вижу, что активирован только режим springMVC и удаляет все маршрутизаторы, определенные в реактивном режиме. Spring MVC запускается с Tomcat. Однако реактивный режим настроен с помощью netty (сервер, не являющийся сервлетом). Я попытался исключить Tomcat, чтобы он полагался только на netty, но не понимаю, как мне настроить для него сервлет. Или есть возможность сосуществовать оба режима?

Я ожидаю увидеть, как camunda webapp и маршруты приложений работают вместе. У меня сейчас может быть активирован только один режим: если SpringMVC: webapp OK, Routes NOK, если Reactive: webapp NOK, Routes OK


person Wefa    schedule 03.05.2019    source источник


Ответы (2)


Обходной путь - использовать tomcat в качестве веб-сервера вместо netty, потому что он может обрабатывать "Spring WebFlux и Spring MVC".

Добавьте в свой файл Gradle

compile 'org.apache.tomcat.embed:tomcat-embed-core'

затем используйте ServletRegistrationBean, который регистрирует ваши функции маршрутизации внутри httpServlet

@Bean
public ServletRegistrationBean routerToServlet() {
    RouterFunction<?> route = routingFunction();
    HttpHandler httpHandler = toHttpHandler(route);
    ServletHttpHandlerAdapter servlet = new ServletHttpHandlerAdapter(httpHandler);
    ServletRegistrationBean bean = new ServletRegistrationBean<>(servlet, "/core/*");
    bean.setLoadOnStartup(1);
    return bean;
}

Ваша функция routingFunction () - это WebFlux Routes, поэтому у вас есть Camunda webapp OK и Routes OK

person Mehdi EL AZRAK    schedule 04.10.2019

Spring документация заявляет, что

Обе веб-платформы отражают имена своих исходных модулей (spring-webmvc и spring-webflux) и сосуществуют бок о бок в Spring Framework. Каждый модуль не является обязательным. Приложения могут использовать один или другой модуль или, в некоторых случаях, оба - например, контроллеры Spring MVC с реактивным WebClient.

В проекте используется Webflux, тогда как веб-приложения Camunda используют MVC. Они используют MVC, потому что camunda-spring-boot-starter автоматически настраивает веб-приложение как веб-приложение Spring MVC (см. CamundaBpmWebappAutoConfiguration).

Может быть, можно было бы иметь другой класс CamundaBpmWebappAutoConfiguration, который загружается в режиме Webflux и реализует WebFluxConfigurer? Как думаете, стоит попробовать?

person thebignet    schedule 05.05.2019
comment
На самом деле кажется, что веб-приложения Camunda основаны на javax.servlet. Поскольку Servlet и Filter являются блокирующими, их невозможно использовать с неблокирующим сервером. - person thebignet; 05.05.2019
comment
Этот проект обеспечивает реализацию API сервлетов для сервера netty. Вы можете найти пример здесь - person Wefa; 06.05.2019
comment
Это может сработать. Я посмотрю, смогу ли я попробовать. - person thebignet; 07.05.2019