Для чего нужен RabbitTemplate в Spring AMQP?
- Как отправить сообщение в RabbitMQ из Spring?
RabbitTemplate — основной способ отправки в Spring AMQP: convertAndSend(exchange, routingKey, payload) с конвертером сообщений (JSON через Jackson2JsonMessageConverter), плюс синхронный request-reply и получение.
- Надёжность: publisher confirms (
publisher-confirm-type: correlated) и returns (mandatory) для неотмаршрутизированных - Durable очереди и persistent сообщения
- Объявление очередей, exchange и bindings — бинами Queue, Exchange, Binding (RabbitAdmin создаст при старте)
А ещё Отправка в транзакции базы не атомарна — outbox
Подробно
Отправка:
rabbitTemplate.convertAndSend("orders", "order.created", event); // exchange, routing key, объект
Объект сериализуется MessageConverter: по умолчанию — Java-сериализация или строки, на практике ставят Jackson2JsonMessageConverter (JSON и заголовок типа). MessagePostProcessor — для заголовков, TTL, приоритета.
Надёжность:
spring.rabbitmq.publisher-confirm-type=correlated— брокер подтверждает приём;CorrelationDataпозволяет понять, какое сообщение подтверждено или отвергнуто (nack) и повторить;publisher-returns=trueиtemplate.mandatory=true— если сообщение не попало ни в одну очередь (нет привязки), оно вернётся в callback, а не исчезнет молча;- durable exchange и очереди, persistent сообщения (по умолчанию в Spring AMQP), quorum queues для отказоустойчивости.
Топология объявляется бинами Queue, TopicExchange, Binding — RabbitAdmin создаёт их при старте.
Request-reply: convertSendAndReceive — синхронный вызов через очередь ответов. Удобно, но превращает асинхронную систему в синхронную; использовать осторожно.
Согласованность с базой: как и с Kafka — outbox.
Что хотят услышать
- convertAndSend и конвертер сообщений.
- Publisher confirms и returns.
- Объявление топологии.
Частые ошибки
- Не включать confirms и returns и терять сообщения молча.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Подписываться на очередь и обрабатывать сообщения
- ✗Писать сообщения напрямую в очередь, минуя exchange
- ✗Создавать очереди и таблицы для хранения сообщений
- ✓Отправлять сообщения в exchange с routing key
Что спросят дальше
- Что такое publisher confirm?
- Чем direct exchange отличается от topic exchange?
Разбор темы
- Spring AMQP и RabbitMQ
RabbitTemplate, @RabbitListener, exchanges, bindings, manual ack, retries, DLQ и prefetch.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.