Spring cloud gateway with discoveryclient and static routes

1k views Asked by At

I'm currently replacing an api gateway using Netflix Zuul with spring cloud gateway. The setup uses discovery client (Eureka) for most of the routes, but we also have a solr instance running which requires manually defined routes (as solr doesn't support eureka)

Using a static route to solr running on localhost works fine using the following config:

  routes:
    - id: solr
      predicates:
        - Path=/solr/**
      uri: http://localhost:10983
      filters:
        - RewriteLocationResponseHeader=AS_IN_REQUEST, Location,

However, I would like to use a load-balanced uri for this route as we have multiple solr instances. Looking at the documentation I've found that the way to implement this is to define a Bean returning a ServiceInstanceListSupplier. I've imlemented the following function:

@Bean
ServiceInstanceListSupplier serviceInstanceListSupplier() {
    List<String> servers = Arrays.asList(microserviceGatewayConfig.getServers().split(","));
    return new SolrServiceInstanceListSupplier("solrhosts", servers);
}

However, this seems to override the ServiceInstances defined from Eureka, meaning only the manual services are used...

Do anyone know if it is possble to combine manually defined serviceinstances with those generated from eureka?

1

There are 1 answers

0
mlidal On

The approach with creating a Bean returning a ServiceInstanceListSupplier doesn't seem to work in any way... However, I've found a way to achieve the same in application.yml, by adding the following config:

spring:
  cloud:
    discovery:
      client:
        simple:
          instances:
            solr-cluster:
              - instanceId: cluster1
                serviceId: solr-cluster
                host: soa03i-t.usrv.ubergenkom.no
                port: 10983
              - instanceId: cluster2
                serviceId: solr-cluster
                host: soa04i-t.usrv.ubergenkom.no
                port: 10983

This can be combined with autogenerated routes from service discovery (e.g. Eureka)