Message queues are widely used in various systems to transfer information between two systems. They can be used to move data, metadata, signals, or a combination of all three. Message queues have been around for a long time, from physical message boxes to telegrams. They act as a decoupling mechanism, allowing systems to communicate with each other without being directly dependent on each other. However, message queues are not a one-size-fits-all solution. They have their limitations and may not be necessary in certain cases. Delivery guarantees and semantics, such as at-least-once, at-most-once, and exactly-once, play a crucial role in the design and implementation of message queues. Additionally, the choice between ordering and parallelism is another crucial decision to make when using message queues.
https://sudhir.io/the-big-little-guide-to-message-queues