Skip to content
Komsan Nipharat

Case study

Go workers and NSQ schedulers

The New MVAS scheduler: a Go + NSQ queue processor that sends subscription content, charges, and warnings across three Thai mobile operators.

FIG.1Workers
Role
Main author — 597 of 657 commits (2022–2023)
Stack
GoEchoNSQMongoDB
Result
597 of 657 commits (91%).

Problem

Payment, cleanup, and telecom-adjacent work cannot all live in the request thread. Jobs pile up, fail, and need to be retried without blocking the API.

What I owned

Main author — 597 of 657 commits (2022–2023)

What I built

  • Built per-operator send, charge, and retry flows, including delivery-report error tasks.
  • Moved blocklist and whitelist checks into MongoDB aggregations and fixed production deadlocks.
  • Built short-link generation for content messages, free-trial warnings, quizzes, and top-ups.

System shape

Go + Echo service; schedulers enqueue work on NSQ independently of the HTTP cycle and workers consume it. Per-operator retry paths, delivery-report handling, and MongoDB aggregations for blocklist and subscription checks.

What changed

Long-running and retryable work moved off the request path, which is where it belongs.

Outcome

597 of 657 commits (91%).