RabbitMQ exchange vs queue, explained