{"id":15178858,"url":"https://github.com/akaza21/springboot-microservices","last_synced_at":"2026-02-04T17:02:29.552Z","repository":{"id":252464290,"uuid":"840206259","full_name":"akaza21/SpringBoot-Microservices","owner":"akaza21","description":"Simple but Robust end to end microservice architecture using SpringBoot.","archived":false,"fork":false,"pushed_at":"2024-09-08T13:35:08.000Z","size":31040,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-25T14:52:53.061Z","etag":null,"topics":["api-gateway","circuit-breaker","docker","grafana","kafka","kubernetes-deployment","microservices","restapi","springboot3","swagger-ui","typescript"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/akaza21.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-09T07:38:35.000Z","updated_at":"2024-09-08T13:35:11.000Z","dependencies_parsed_at":"2024-08-10T00:23:01.066Z","dependency_job_id":"49aba9f4-7ddf-4c30-a11d-2a664bddcd7e","html_url":"https://github.com/akaza21/SpringBoot-Microservices","commit_stats":{"total_commits":6,"total_committers":1,"mean_commits":6.0,"dds":0.0,"last_synced_commit":"25ca8836b2b232ceb00803b67fe5b5979323027f"},"previous_names":["akaza21/springboot-microservices"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/akaza21/SpringBoot-Microservices","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akaza21%2FSpringBoot-Microservices","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akaza21%2FSpringBoot-Microservices/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akaza21%2FSpringBoot-Microservices/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akaza21%2FSpringBoot-Microservices/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/akaza21","download_url":"https://codeload.github.com/akaza21/SpringBoot-Microservices/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akaza21%2FSpringBoot-Microservices/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29091317,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-04T03:31:03.593Z","status":"ssl_error","status_checked_at":"2026-02-04T03:29:50.742Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-gateway","circuit-breaker","docker","grafana","kafka","kubernetes-deployment","microservices","restapi","springboot3","swagger-ui","typescript"],"created_at":"2024-09-27T15:40:23.419Z","updated_at":"2026-02-04T17:02:29.536Z","avatar_url":"https://github.com/akaza21.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Spring Boot Microservices\nThis is a personal project where I’ve been experimenting with building a robust microservices architecture using a variety of modern technologies.\n\n## Microservices Overview\nThis project is composed of several microservices, each designed to handle a specific part of the application’s domain:\n- Product Service: Manages product details and inventory levels.\n- Order Service: Handles customer orders, including order creation, status tracking, and payment processing.\n- Inventory Service: Keeps track of inventory levels, ensuring that orders are only placed if the items are in stock.\n- Notification Service: Sends notifications to customers, whether it’s order confirmations, shipping updates, or any other event.\n- API Gateway: The single entry point for all clients, handling requests and routing them to the appropriate services\n\n\n## Tech Stack\n\nI’ve used a bunch of technologies that I’m particularly interested in. Here’s what powers this project:\n\n- \u003ch3\u003eSpring Boot\u003c/h3\u003e The backbone of the microservices, providing all the essential features for building robust and scalable applications.\n- \u003ch3\u003eMongo DB\u003c/h3\u003e Handling data storage for some of the services, especially where flexibility and scalability are crucial.\n- \u003ch3\u003eMySQL\u003c/h3\u003e For relational data storage, mainly used by the Inventory Service.\n- \u003ch3\u003eKafka\u003c/h3\u003eMessaging between services, ensuring that communication is efficient and resilient.\n- \u003ch3\u003eKeycloak\u003c/h3\u003eManaging authentication and authorization, centralizing the security aspects of the system.\n- \u003ch3\u003eTest Containers with Wiremock\u003c/h3\u003e  For testing, allowing me to simulate different environments and ensure the services work as expected.\n- \u003ch3\u003eGrafana Stack\u003c/h3\u003e Monitoring the whole system, with Prometheus for metrics, Loki for logs, and Tempo for tracing. It’s all about keeping an eye on the health of the microservices.\n- \u003ch3\u003eResilience4j\u003c/h3\u003e Implementing the circuit breaker pattern to handle faults gracefully and maintain system stability.\n- \u003ch3\u003eKubernetes\u003c/h3\u003e For orchestrating the deployment of services, managing the complexity of distributed systems, and ensuring everything runs smoothly.\n- \u003ch3\u003eSwagger\u003c/h3\u003e Ensured comprehensive, consistent, and clear documentation of REST API endpoints for improved collaboration and integration.\n\n## Application Architecture\n![image](https://github.com/akaza21/SpringBoot-Microservices/blob/master/screenshots/Screenshot%202024-08-11%20221437.png)\n\n## For the Frontend\n\nMake sure you have the following installed on your machine:\n\n- Node.js\n- NPM\n- Angular CLI\n\nRun the following commands to start the frontend application\n\n```shell\ncd frontend\nnpm install\nnpm run start\n```\n## Building the Backend Services\n\nRun the following command to build and package the backend services into a docker container\n\n```shell\nmvn spring-boot:build-image -DdockerPassword=\u003cyour-docker-account-password\u003e\n```\n\nThe above command will build and package the services into a docker container and push it to your docker hub account.\n\n## For the Backend Services\n\nMake sure you have the following installed on your machine:\n\n- Java 21\n- Docker\n- Kind Cluster - https://kind.sigs.k8s.io/docs/user/quick-start/#installation\n\n### Start Kind Cluster\n\nRun the k8s/kind/create-kind-cluster.sh script to create the kind Kubernetes cluster\n\n```shell\n./k8s/kind/create-kind-cluster.sh\n```\nThis will create a kind cluster and preload all the required docker images into the cluster, this will save you time downloading the images when you deploy the application.\n\n### Deploy the infrastructure\n\nRun the k8s/manisfests/infrastructure.yaml file to deploy the infrastructure\n\n```shell\nkubectl apply -f k8s/manifests/infrastructure.yaml\n```\n\n### Deploy the services\n\nRun the k8s/manifests/applications.yaml file to deploy the services\n\n```shell\nkubectl apply -f k8s/manifests/applications.yaml\n```\n\n### Access the API Gateway\n\nTo access the API Gateway, you need to port-forward the gateway service to your local machine\n\n```shell\nkubectl port-forward svc/gateway-service 9000:9000\n```\n\n### Access the Keycloak Admin Console\nTo access the Keycloak admin console, you need to port-forward the keycloak service to your local machine\n\n```shell\nkubectl port-forward svc/keycloak 8080:8080\n```\n\n### Access the Grafana Dashboards\nTo access the Grafana dashboards, you need to port-forward the grafana service to your local machine\n\n```shell\nkubectl port-forward svc/grafana 3000:3000\n```\n![image](https://github.com/akaza21/SpringBoot-Microservices/blob/master/screenshots/Screenshot%202024-08-09%20010507.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakaza21%2Fspringboot-microservices","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fakaza21%2Fspringboot-microservices","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakaza21%2Fspringboot-microservices/lists"}