|
I agree. The pattern I've seen more than once is is: 1) Adopt RabbitMQ without any experts on the team
2) Conceal Rabbit/AMQP functionality as much as possible behind a simplifying abstraction, often in multiple layers, often written by non-experts
3) Run into some intractable reliability or scaling problem
4) Have no idea how to solve it because you still don't have any experts
5) Throw a lot of money at the problem, fail
6) Decide to do a very expensive migration to a different system (SNS+SQS, Kafka, etc.) At that point, you go back to step 1. If you're lucky, somebody has expertise in the new system and the migration can be pulled off successfully. Otherwise, you either end up repeating the whole process or everything goes off the rails when you're halfway migrated to the new system. This same process happens for all kinds of stuff, not just RabbitMQ, of course. |
For tracking state at scale (but still per-job, per-thing) a Cassandra-like system works best (but preferably a better implementation, eg. SkyllaDB or AeroSpike or some other KV store).