This repository contains a set of templates to help you create a Java Spring Boot microservices architecture with MongoDB.
In this repo you'll find:
- A config-server on port 8888
- A service-registry on port 8761
- An api-gateway on port 8080
- Two microservices:
- company-service on port 8081
- employee-service on port 8082
- Docker (for local ephemeral MongoDB nodes or you can use MongoDB Atlas)
- Java 21
- Maven 3.6.3+
Microservices are supposed to be independent of each others. For this reason, we need two MongoDB instances: one for each microservice.
With Docker
The following script will start two local single node replica set nodes on port 27017 and 27018.
./1_docker-start-mongodb.sh
When you are done:
./3_docker-stop-mongodb.sh
With MongoDB Atlas
You can create two tests clusters on MongoDB Atlas and overwrite the default MongoDB URIs before starting the two microservices.
For the company_service
use:
export MONGODB_URI_1="ATLAS_URI_HERE"
For the employee_service
use:
export MONGODB_URI_2="ATLAS_URI_HERE"
Open five terminals: one for each folder.
Before we start the microservices, we need to retrieve their config repository:
git clone git@github.com:mongodb-developer/microservices-architecture-mongodb-config-repo.git
Update the file config-server/src/main/resources/application.properties so this property points to the config repo.
spring.cloud.config.server.git.uri=${HOME}/Work/microservices-architecture-mongodb-config-repo
Now we can start the Spring Boot projects.
Start with the config-server
as the microservices need this one running to be able to retrieve their configuration.
cd config-server
mvn clean spring-boot:run
cd service-registry
mvn clean spring-boot:run
cd company-service
export MONGODB_URI_1="ATLAS_URI_HERE" # optional
mvn clean spring-boot:run
cd employee-service
export MONGODB_URI_2="ATLAS_URI_HERE" # optional
mvn clean spring-boot:run
cd api-gateway
mvn clean spring-boot:run
The api-gateway
running on port 8080 can distribute the queries to the relevant microservices.
You can test all the APIs using the script:
./2_api-tests.sh
Note that the script is only targeting the port 8080 of the api-gateway.