Можно ли использовать приложение Spring Cloud Gateway в качестве сервера облачной конфигурации?

Я пытаюсь включить приложение Spring Cloud Gateway для автоматического обновления yml конфигурации маршрутизации на лету. Мне удалось настроить сервер Cloud Config для размещения маршрута YAML и включить Spring Cloud Gateway для автоматического обновления его конфигурации с помощью @Scheduled contextRefresher.refresh() использования. Однако для этого требуются два запущенных приложения, и мы хотим минимизировать количество дополнительных серверов, необходимых для поддержки этого требования.

Документация по Spring Cloud Config Server предполагает, что любое загрузочное приложение может быть встроено в сервер конфигурации с помощью аннотации @EnableConfigServer: https://cloud.spring.io/spring-cloud-static/spring-cloud.html#_spring_cloud_config_server

Однако при попытке ввести модуль spring-cloud-config-server в build.gradle моего шлюза я столкнулся со следующей ошибкой при запуске:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.http.codec.ServerCodecConfigurer' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

Из обсуждения здесь (https://github.com/spring-cloud/spring-cloud-gateway/issues/319) похоже, что проблема выше возникает из-за того, что spring-boot-starter-web несовместима со шлюзом; Шлюз - это приложение Netty, а spring-boot-starter-web использует tomcat / servlets. При попытке исключить spring-boot-starter-web из модуля cloud-config-server приложение снова терпит неудачу с:

onfigReactiveWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [org.springframework.cloud.config.server.config.ConfigServerAutoConfiguration]; nested exception is java.io.FileNotFoundException: class path resource [org/springframework/web/servlet/config/annotation/WebMvcConfigurerAdapter.class] cannot be opened because it does not exist

Может быть, приложение Spring Cloud Gateway нельзя включить в качестве сервера CloudConfig? Или я что-то упускаю. FWIW моя версия sprincCloudVersion Finchley.SR1


person acidnbass    schedule 26.09.2018    source источник


Ответы (1)


Они не могут. Сервер конфигурации основан на Spring MVC (сервлетах), шлюз основан на Spring webflux и Netty. Они несовместимы и не могут работать вместе.

person spencergibb    schedule 27.09.2018