Насколько сложно настроить RabbitMQ на микросервисе и интегрировать с монолитом
Что проверяют
Отличаете ли вы простое от сложного. Поднять RabbitMQ и написать первый @RabbitListener это работа на день: образ в docker, spring-boot-starter-amqp, пара свойств в конфиге. Сложность начинается там, где сообщение надо не потерять и не обработать дважды, а монолит и новый сервис живут в разных транзакциях.
Как отвечать
Разложите ответ на три части: инфраструктура, семантика доставки, границы транзакций.
Инфраструктура действительно простая: обменник нужного типа (direct, topic, fanout), очереди, привязки по ключу маршрутизации, Jackson2JsonMessageConverter вместо сериализации Java, чтобы сообщения читали и не-Java потребители.
Семантика сложнее. RabbitMQ даёт доставку не менее одного раза, значит потребитель обязан быть идемпотентным. На практике это ручное подтверждение (AcknowledgeMode.MANUAL), ограниченный prefetch, подтверждения публикации на стороне отправителя, долговечные очереди и постоянные сообщения. Плюс ограниченное число повторов и обменник недоставленных сообщений: без него отравленное сообщение возвращается в очередь бесконечно и выжигает процессор.
Главная сложность интеграции с монолитом лежит в другом месте и называется двойной записью: запись в базу и публикация в брокер не атомарны, падение между ними даёт либо потерянное событие, либо сообщение о том, чего в базе нет. Называйте решение прямо: таблица исходящих сообщений, событие пишется в той же транзакции, отдельный процесс вычитывает её и публикует.
Где спотыкаются
Обещают доставку ровно один раз. Брокер её не даёт: дубликаты снимаются на стороне потребителя ключом идемпотентности и уникальным индексом.
Второе: описывают RabbitMQ словами про Kafka. Перечитать историю с начала, подключить нового потребителя к старым событиям, опереться на порядок внутри раздела это не про очереди: после подтверждения сообщение из очереди исчезает.
Третье: оставляют автоподтверждение и рассказывают про надёжность. При нём сообщение считается обработанным до того, как отработал код, и падение потребителя теряет его молча.