A Go-based event-driven backend demonstrating Publish/Subscribe architecture using RabbitMQ. Built as part of a real-time strategy game simulation (“Peril”), showcasing scalable and decoupled system design.
- ⚡ Event-driven architecture using Pub/Sub pattern
- 📡 Message broker integration with RabbitMQ (AMQP)
- 🧩 Decoupled services (publisher, subscriber, consumer)
- 🔄 Real-time game events (moves, battles, pause/resume)
- 📦 JSON & Gob-based message serialization
- 🧠 Dead-letter queues & retry handling (Ack/Nack)
- 📈 Scalable with multiple consumers and queues
Publisher (Game Server)
|
v
Exchange (RabbitMQ)
|
---------------------
| | |
Queue Queue Queue
(Client) (Logs) (War)
| | |
Consumer Consumer Consumer
- Go (Golang)
- RabbitMQ
- AMQP Protocol
- Docker
docker run -it --rm --name rabbitmq \
-p 5672:5672 -p 15672:15672 \
rabbitmq:3.13-managementAccess UI: http://localhost:15672
(username: guest, password: guest)
go mod tidygo run ./cmd/servergo run ./cmd/clientspawn europe infantry
move asia 1
status
pause
resume- Publisher → Sends events (moves, pause, logs)
- Exchange → Routes messages using routing keys
- Queue → Stores messages until consumed
- Consumer → Processes messages asynchronously
- Difference between sync vs async communication
- Designing scalable microservices with Pub/Sub
- Handling failures with dead-letter queues
- Message delivery guarantees (at-least-once)