A message queue is useful when producers and consumers should not have to move at the same speed. It gives a system a place to absorb bursts, retry work, and decouple services that would otherwise fail together.

Queues are most useful when the work can be asynchronous and when the team is prepared to own retries, dead-letter handling, visibility into lag, and idempotent consumers.