Search code examples
spring-cloudnetflix-eurekaspring-cloud-netflix

spring zuul + eureka route delegation


Im working with Spring Cloud Zuul + Eureka Server. i know that Zuul will create routes dynamically when there is a service registered on Eureka and it will be route using their Service ID. Is it possible to delegate routes to group services ?

for example i have 2 services that i want to group:

server.port=8081
spring.application.name=company-account-api

server.port=8082
spring.application.name=company-transaction-api

eureka config

spring.application.name=api-discovery
spring.cloud.config.uri=${CONFIG_SERVER_URL:http://localhost:8888}

on Zuul is it possible define a route where i can access the 2 services registered on eureka ?

server.port=9090
spring.application.name=api-gateway
eureka.instance.preferIpAddress=true
eureka.client.registerWithEureka=true
eureka.client.fetchRegistry=true
eureka.serviceurl.defaultzone=http://localhost:8761/eureka
zuul.routes.company-api=/company-**

so when i access http://localhost:9090/company-api/company-account-api & http://localhost:9090/company-api/company-transaction-api the service registered on eureka will be available


Solution

  • You can achieve this with the following config

    zuul.ignored-services=*
    zuul.routes.company-account-api.serviceId=company-account-api
    zuul.routes.company-account-api.path=/company-api/company-account-api/**
    
    zuul.routes.company-transaction-api.serviceId=company-transaction-api
    zuul.routes.company-transaction-api.path=/company-api/company-transaction-api/**
    

    Explanation:
    zuul.ignored-services=* This will supress the default config

    zuul.routes.company-account-api.serviceId=company-account-api
    zuul.routes.company-account-api.path=/company-api/company-account-api/**

    What is exposed to public is /company-api/company-account-api/** which will be internally mapped to company-account-api service.

    If you are not using service discovery then you can do it using url instead of service name

    zuul.routes.company-account-api.url=http://accountapihost:accountapiport
    zuul.routes.company-account-api.path=/company-api/company-account-api/**