Изучаю RabbitMQ, как понял, все сообщения в очередь должны поступать через exchange от producer`а.
Exchange в свою очередь маршрутизирует сообщение.
В примерах кода, exchange написан прямо в коде продюсера - это правильно? Или Exchnage должен быть отдельным файлом?
Т.е. насколько я понял, может быть несколько файлов-эксченджей, и каждый настроен под свой тип (direct/topic/fanout/headers), и при отправки сообщения мы отправляем в нужный эксчендж?
Exchange это объект сервера, клиент лишь должен знать его имя (строку) для отправки сообщения. Клиент может создавать новые эксченжи, для чего нужно предоставить больше информации RabbitMQ (например, тип), в мануалах это как раз и используют чтобы упроситить и показать всю конфигурацию явно. В реальном продакшене, имхо, лучше чтобы вся инфраструктура обменников и очередей была предподготовленна отдельными утилитами, но для небольших сервисов это большой оверхед и проще из кода всё создавать. Я бы рекомендовал посмотреть ещё в сторону такого решения.