spring-cloud-gateway-routing
spring-cloud-gateway-routing copied to clipboard
This project demonstrates the usage of API gateway between microservices using spring cloud gateway
spring-cloud-gateway-routing
This project demonstrates the usage of API gateway between microservices using spring cloud gateway.
what is spring cloud gateway ?
Spring Cloud Gateway is an intelligent and programmable router based on Project Reactor.
Compatability Matrix
choose the branch based on below maintained versions.
Branch/Version | Spring Boot | Spring Cloud |
---|---|---|
master | 2.1.5.RELEASE | Greenwich.SR1 |
v2.1.3 | 2.1.3.RELEASE | Greenwich.RELEASE |
Projects
Name | Port | Description |
---|---|---|
spring-cloud-gateway | 9500 | spring cloud gateway router |
jio-store-service | 9501 | jio microservice |
airtel-store-service | 9502 | airtel microservice |
vodaphone-store-service | 9503 | vodaphone microservice |
config-server | 8888 | spring cloud config server |
eureka-server | 8761 | eureka-server |
Eureka Server Registration (Optional)
By default eureka is disabled.
eureka:
client:
enabled: false
To enable eureka, set below property in all the microservices and restart.
spring:
profiles:
active: eureka
How to build and run ?
-
Download/Clone the repository :
$ git clone https://github.com/BarathArivazhagan/spring-cloud-gateway-routing.git $ cd spring-cloud-gateway-routing $ ./mvnw clean install
-
To run the application :
$ docker-compose up
How to test the application ?
Use gateway routes to route to respective microservices.
spring cloud gateway route definition :
spring:
cloud:
gateway:
routes:
- id: jio-service
uri: http://localhost:9501
predicates:
- Path= /jio/*
filters:
- StripPrefix=1 # required to strip the prefix made to the request . Ex /jio/customers request will go to jio service as /customers
- id: airtel-service
uri: http://localhost:9502
predicates:
- Path= /airtel/*
filters:
- StripPrefix=1
- id: vodaphone-service
uri: http://localhost:9503
predicates:
- Path= /vodaphone/*
filters:
- StripPrefix=1
$ curl http://localhost:9500/jio/customers
[
{
"customerName": "barath-jio",
"customerAge": 25,
"customerGender": "MALE"
}
]
$ curl http://localhost:9500/airtel/customers
[
{
"customerName": "barath-airtel",
"customerAge": 25,
"customerGender": "MALE"
}
]
$ curl http://localhost:9500/vodaphone/customers
[
{
"customerName": "barath-vodaphone",
"customerAge": 25,
"customerGender": "MALE"
}
]
Header based routing strategy
Enable SPRING_PROFILES_ACTIVE=header to test header based routing strategy
Query param based routing strategy
Enable SPRING_PROFILES_ACTIVE=query to test query param based routing strategy
Eureka Registration View
How to rebuild the project after the changes?
docker-compose build