GoFlow simulates real-world service orchestration with clean service boundaries, asynchronous communication, and containerized deployments.
The project includes multiple services—each with a focused responsibility—connected through HTTP and gRPC. It leverages RabbitMQ for message queues, PostgreSQL and MongoDB for persistence, and Mailhog for email testing. Everything is containerized with Docker or orchestrated with Kubernetes and controlled through a simple Makefile workflow.
A lightweight front-end UI showcases the interactions, while a clean Makefile workflow (or a single kubectl apply -f k8s/) spins everything up, giving you a practical view of scalable, event-driven systems in action.
- 🌟 Overview
- 🧩Services Overview
- 🔌 Interservice Communication
- 🏛️ Architecture Diagram
- 🛠️ Tech Stack
- 🧪 Getting Started
- 📦 Kubernetes Manifests
- 📊 Kubernetes Dashboard
- 📸 Demo
- 🤝 Contributing
GoFlow is a microservices-based backend system built using Go. It simulates real-world service orchestration with clean service boundaries, asynchronous communication, and containerized deployments.
The project includes multiple services — each with a focused responsibility — connected through HTTP and now also gRPC. It leverages tools like RabbitMQ for message queues, PostgreSQL and MongoDB for persistence, and Mailhog for email testing. Everything is containerized using Docker and controlled through a simple Makefile workflow.
Handles user authentication and management.
Connected to a PostgreSQL database for storing user credentials and session data.
Optional single point of entry.
Forwards incoming client requests to the appropriate microservice.
Uses Mailhog for local email testing.
Sends and previews emails when triggered.
Captures and stores logs from other services.
Persists log data in MongoDB.
Subscribes to events from RabbitMQ.
Processes incoming messages asynchronously, demonstrating event-driven architecture.
GoFlow now supports both:
HTTP communication between Broker and services
gRPC for faster, strongly-typed communication between internal services
Language: Go (Golang)
Databases: PostgreSQL, MongoDB
Messaging Queue: RabbitMQ
Email Testing: Mailhog
Containerization: Docker, Docker Compose
Build: Makefile
git clone https://github.com/Adit0507/GoFlow.git
cd GoFlow
make up_build
- Build all Go binaries
- Stop any running Docker containers
- Start all containers with fresh builds
make up
make down
make start
to stop frontend
make stop
Every microservice now ships with a Deployment/Service manifest in k8s/, a. Spin up the full stack on any Kubernetes cluster (e.g., Minikube) with:
kubectl apply -f k8s/
kubectl apply -f ingress.yaml
-
Each YAML (authentication.yaml, broker.yaml, rabbit.yaml, etc.) creates a Deployment plus its corresponding Service, bringing all components online just like Docker Compose.
-
ingress.yaml creates my-ingress, which routes traffic from two hostnames:
-
front-end.info → front-end Service :80
-
broker-service.info → broker-service Service :8080 The nginx.ingress.kubernetes.io/rewrite-target: /$1 annotation keeps URLs clean.
-
After applying the manifests, verify cluster health with:
minikube dashboard
Ik the Auth service is failing for now,fixing it 😂
Showing the working of GoFlow's microservices in action.
MailHog (For Email Testing)
This is a passion project built to explore backend architecture. Contributions, suggestions, or just feedback are all welcome!