Получить доступ

Для чего нужен RabbitTemplate в Spring AMQP?

MiddleSpring AMQP и RabbitMQRabbitMQ
Ещё спрашивают так:
  • Как отправить сообщение в 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

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Отправка:

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 с routing key — а тот по bindings маршрутизирует их в очереди
  • ✗Подписываться на очередь и обрабатывать сообщения
  • ✗Создавать таблицы в базе данных
  • ✗Писать напрямую в очередь, минуя exchange

Что спросят дальше

  • Что такое publisher confirm?
  • Чем direct exchange отличается от topic exchange?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем