This repository contains the source code of the practical use case described in the book Learn Microservices with Spring Boot 3 (3rd Edition). And I made some changes and add pulsar logs appender for processing logs as well as spring pulsar support for event driven messages processing to replace rabbitmq.
The figure below shows a high-level overview of the final version of our system.
The main concepts included in this project are:
- Why do we need Centralized Logs and Distributed tracing?
- Why would I create Docker images for my applications?
- Building a simple logger application with Spring Boot and Pulsar.
- Event Driven message processing with spring pulsar
- Distributed traces with Micrometer.
- Building Docker images for Spring Boot applications with Cloud Native Buildpacks.
- Container Platforms, Application Platforms, and Cloud Services.
First, build the application images with Dockerfile:
multiplication$ docker build -t multiplication:0.0.1-SNAPSHOT .
gamification$ docker build -t gamification:0.0.1-SNAPSHOT .
gateway$ docker build -t gateway:0.0.1-SNAPSHOT .
logs$ docker build -t logs:0.0.1-SNAPSHOT .
or BuildPack
multiplication$ ./mvnw spring-boot:build-image
gamification$ ./mvnw spring-boot:build-image
gateway$ ./mvnw spring-boot:build-image
logs$ ./mvnw spring-boot:build-image
or Jib
multiplication$ mvn compile jib:dockerBuild
gamification$ mvn compile jib:dockerBuild
gateway$ mvn compile jib:dockerBuild
logs$ mvn compile jib:dockerBuild
Then, build the consul importer from the docker/consul
folder:
$ consul agent -node=learnmicro -dev
docker/consul$ consul kv export config/ > consul-kv-docker.json
docker/consul$ docker build -t consul-importer:1.0 .
And the UI server (first you have to build it with npm run build
):
challenges-frontend$ npm install
challenges-frontend$ npm run build
challenges-frontend$ docker build -t challenges-frontend:1.0 .
It is only necessary for docker deployment of frontend app add items to hosts C:\Windows\System32\drivers\etc\hosts 127.0.0.1 challenges-frontend
Once you have all the images ready, run:
docker$ docker-compose up
See the figure below for a diagram showing the container view.
Once the backend and the frontend are started, you can navigate to http://localhost:3000
in your browser and start resolving multiplication challenges.
After the system is up and running, you can quickly scale up and down instances of both Multiplication and Gamification services. For example, you can run:
docker$ docker-compose up --scale multiplication=2 --scale gamification=2
And you'll get two instances of each of these services with proper Load Balancing and Service Discovery.