Вопрос с собеседования · Spring

Для чего нужен 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

Подробно

Отправка:

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?

Разбор темы

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

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования