Hey everyone,
For sometime I have been working on a v2 rewrite of our enterprise TMS platform in Go + Sveltekit. Without boring everyone with details, it robust, and has more features than just a standard Transportation Management System.
Initial plan was just to use the pg_cron & pgmq, but as development went on I added robfig/cron & riverqueue/river. Now, I’m debating whether I should have DAG workflows, which are paywalled (among other features) in River so I’m considering ripping it out to be replaced by Hatchet.
The tradeoff: Hatchet runs as a separate engine with its own DB, so I’d lose transactional enqueueing — today I use InsertTx to commit a job in the same
transaction as the business write (atomic). With Hatchet that’s a post-commit API call + idempotency keys.
For folks who’ve run both:
- How much did losing transactional enqueue actually bite in practice?
- Worth swapping queues for workflows, or just hand-roll DAGs as chained River jobs?
Only have a handful of multi-step pipelines, so a full swap feels heavy. Sanity-checking my thinking.
OR, have I gone mad, and should haven’t even considered anything but Postgres extensions until they become a true bottleneck?
I’m a grown man, I can take fierce, constructive criticism..I think. Thanks, in advance.
EDIT: FWIW, I started this project over a year ago, but it is my very first project with Go.