Aigars Pontags
Aigars Pontags

Reputation: 11

Spring cloud gateway routes from consul

I can't figure out if spring-cloud-gateway supports Route reading from consul registry, like it is with Zuul.

I added spring-cloud-starter-consul-discovery dependency and @EnableDiscoveryClient, and configured consul properties in application.yml, hovewer, /actuator/gateway/routes doesn't show any routes from consul

I also tried to set spring.cloud.gateway.discovery.locator.enabled: true but doesn't changed anything. Sample excample below:

spring:
  cloud:
    consul:
      discovery:
        register: false
          locator:
            enabled: true
        acl-token: d3ee84e2-c99a-5d84-e4bf-b2cefd7671ba
        enabled: true

so the main question, is it even suppose to work?

EDIT: Probably should have mentioned it is version 2.0.0.M5., with Spring Boot 2.0.0.M7

Also I launched with --debug and there is this line:

   GatewayDiscoveryClientAutoConfiguration#discoveryClientRouteDefinitionLocator:
  Did not match:
     - @ConditionalOnBean (types: org.springframework.cloud.client.discovery.DiscoveryClient; SearchStrategy: all) did not find any beans of type org.springframework.cloud.client.discovery.DiscoveryClient (OnBeanCondition)
  Matched:
     - @ConditionalOnProperty (spring.cloud.gateway.discovery.locator.enabled) matched (OnPropertyCondition)

Upvotes: 1

Views: 2977

Answers (1)

Manuel Flores
Manuel Flores

Reputation: 11

I could solve it declaring the following bean: DiscoveryClientRouteDefinitionLocator (reference)

@Configuration
@EnableDiscoveryClient
public class AutoRouting {
  @Bean
  public DiscoveryClientRouteDefinitionLocator discoveryClientRouteDefinitionLocator(DiscoveryClient discoveryClient, DiscoveryLocatorProperties properties) {
    return new DiscoveryClientRouteDefinitionLocator(discoveryClient, properties);
  }
}

P.S: You need to include "spring-cloud-consul"

Upvotes: 1

Related Questions