Могу ли я использовать SpringMvc и webflux вместе? - PullRequest
0 голосов
/ 21 декабря 2018

Я хотел бы использовать 2 подхода (реактивный и стандартный) в одном проекте.

Я пытался перенести одну конечную точку API REST на реактивный веб-поток и протестировать производительность перед миграцией остальных из них.Но это не сработало.Я добавил для него роутер и обработчик, но пока я не удалил spring-boot-starter-web из зависимостей и не отключил @RestController, я все время получал код http 404.Это возможно или нет?Или я должен перевести весь проект на реактивный подход?

1 Ответ

0 голосов
/ 21 декабря 2018

Как объяснено в справочной документации Spring Boot, Spring Boot автоматически сконфигурирует приложение Spring MVC, если доступны оба MVC и WebFlux .Для этого есть несколько причин:

  • Spring MVC не может работать в Netty
  • , поскольку обе инфраструктуры будут конкурировать за одно и то же задание (например, обслуживание статических ресурсов, сопоставлений и т. Д.).)
  • смешивание обеих моделей времени выполнения в одном и том же контейнере не является хорошей идеей и может плохо работать или совсем не работать

В зависимости от цели, к которой вы стремитесьВ этом случае может быть несколько способов работать с этим.

Если вы хотите использовать WebClient для оптимизации одновременных удаленных вызовов HTTP и использовать операторы Reactor, вы можете продолжать использовать аннотированные контроллеры Spring MVC.и возвращать реактивные типы в качестве возвращаемых значений ( подробнее об этом в этом Spring Boot talk ).

Если вы хотите работать с чистой масштабируемостью и задержкой (поэтому необязательно необработанная пропускная способность),тогда вы можете начать использовать spring-boot-starter-webflux и работать оттуда.Обратите внимание, что использование блокирующих API (например, блокирование вызовов базы данных) запрещено, а перенос их с Flux или Mono и планирование, которые работают в отдельных пулах потоков, будут работать против вас с точки зрения производительности.

Наконец,если вы хотите использовать функциональный подход, предоставляемый Spring WebFlux, то он не обязательно будет работать лучше.Это действительно зависит от вашего варианта использования и от того, как вы его реализуете.

...