Building an event-driven notification system in Go and RabbitMQ
summary
Cacoo moves from a Java monolith to ~7 microservices on Kubernetes using gRPC and Postgres, then builds a production event-driven backend in Go with RabbitMQ as broker, an event DB, and multiple Go workers (about four workers per type) handling in‑app notifications, emails and webhooks. Messages use protobuf, a deliberate events vs tasks schema (events carry IDs, tasks carry full payloads), a custom Go AMQP wrapper, separate publish/consume connections, buffered notifyClose and smart broker dumb consumer semantics; the system runs and scales in production.
AI-written summary · about
chapters (18)
- 0:00Introduction
- 0:33Overview
- 1:30System Architecture
- 2:34Current Architecture
- 5:08Intermediate steps
- 6:03Events
- 11:01Events vs Tasks
- 13:34Resolving action
- 14:04Why RabbitMQ
- 18:24What is AMQP
- 22:20Go Library
- 24:53Library structure
- 26:39RPC implementation
- 29:49Development tips
- 30:02Two separate connections
- 31:47Buffer channels
- 33:31Dynamically declare objects
- 36:09PerfectSize
related talks
40mScaling RabbitMQ
34mBuilding a scalable multichannel notification system
23mImplementing Event-driven Systems with Go
40mBuilding Scalable Resilient IoT Messaging
51mMicroservices in Go
54mKeynote: Bringing a Ferrari to a Horse Race
05mGo for Real Time Streaming Architectures
24mAdvanced RabbitMQ Strategies: A case study
