<aside> ⚠️ When you look at real-world distributed queue implementations like https://github.com/antirez/disque this setup may seem like overkill. Do you really need metadata service and backend server (queue messages service) to be separate? Disque handles these together.
Synchronous communication between producer and consumer is easy to implement and reason about, but sync comms makes it hard to deal with consumer failures.
We need to build an intermediary component, a message queue. A producer sends data into the queue, and exactly one consumer receives and processes the message.