Skip to content

A hands-on microservices playground in Go, wired with gRPC, RabbitMQ, and Kubernetes for real-world system design exploration.

Notifications You must be signed in to change notification settings

Adit0507/GoFlow

Repository files navigation

GoFlow 🐹🌀

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.

📚 Table of Contents

🌟 Overview

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.

🧩 Services Overview

🔐 Authentication Service

Handles user authentication and management.

Connected to a PostgreSQL database for storing user credentials and session data.

🔀 Broker Service

Optional single point of entry.

Forwards incoming client requests to the appropriate microservice.

📧 Mail Service

Uses Mailhog for local email testing.

Sends and previews emails when triggered.

📝 Logger Service

Captures and stores logs from other services.

Persists log data in MongoDB.

🎧 Listener Service

Subscribes to events from RabbitMQ.

Processes incoming messages asynchronously, demonstrating event-driven architecture.

🔌 Interservice Communication

GoFlow now supports both:

HTTP communication between Broker and services

gRPC for faster, strongly-typed communication between internal services

🏛️ Architecture Diagram

20

🛠️ Tech Stack

Language: Go (Golang)

Databases: PostgreSQL, MongoDB

Messaging Queue: RabbitMQ

Email Testing: Mailhog

Containerization: Docker, Docker Compose

Build: Makefile

🧪 Getting Started

1. Clone the repository

git clone https://github.com/Adit0507/GoFlow.git
cd GoFlow

2. Build and run all services

make up_build
  • Build all Go binaries
  • Stop any running Docker containers
  • Start all containers with fresh builds

3. Start services without rebuilding

make up

4. Stop all services

make down

5. Launch the Front-end

make start

to stop frontend

make stop

📦 Kubernetes Manifests

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.

📊 Kubernetes Dashboard

After applying the manifests, verify cluster health with:

minikube dashboard

🧩 Kubernetes Workloads

Ik the Auth service is failing for now,fixing it 😂

Demo

Showing the working of GoFlow's microservices in action.

Broker Service

🔒 Authentication Service (Requires fixing 🔨)

Logger Service (happening via gRPC 🔥)

📧 Mail Service


MailHog (For Email Testing)

gRPC Log

🤝 Contributing

This is a passion project built to explore backend architecture. Contributions, suggestions, or just feedback are all welcome!

About

A hands-on microservices playground in Go, wired with gRPC, RabbitMQ, and Kubernetes for real-world system design exploration.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published