Spring AMQP (RabbitMQ)
Тема дорожной карты · Spring Boot
Spring AMQP (RabbitMQ) — это интеграционный модуль Spring Boot для Advanced Message Queuing Protocol, предоставляющий высокоуровневые абстракции поверх RabbitMQ и упрощающий построение надёжного, несвязанного обмена сообщениями между микросервисами. Добавление spring-boot-starter-amqp в проект заставляет Spring Boot авто-настроить ConnectionFactory, RabbitTemplate для отправки сообщений и RabbitAdmin, объявляющий обменники, очереди и привязки, определённые как Spring-бины через Queue, TopicExchange и Binding. Методы-консьюмеры аннотируются @RabbitListener(queues = "orders") и конкурентно обрабатываются SimpleMessageListenerContainer, тогда как MessageConverter — как правило, Jackson2JsonMessageConverter — прозрачно обрабатывает сериализацию и десериализацию доменных объектов. Spring AMQP поддерживает dead-letter exchanges, политики повторных попыток через RetryTemplate и подтверждения издателей для гарантированной доставки — паттерны, необходимые в событийно-ориентированных Spring Boot-архитектурах, развёрнутых в Docker и Kubernetes. Testcontainers предоставляет одноразовый Docker-контейнер RabbitMQ для интеграционных тестов, позволяя проверять потоки сообщений Spring AMQP сквозным образом без настройки инфраструктуры.
Как это работает
Spring AMQP (RabbitMQ): Spring Kafka (@KafkaListener + KafkaTemplate) для high-throughput event streaming. Spring AMQP (@RabbitListener + RabbitTemplate) для RabbitMQ. @Scheduled cron-style scheduling; @Async для fire-and-forget задач (с явным executor — никогда дефолт). ApplicationEvent + @EventListener для in-process pub/sub. Выбирайте Kafka для streams + replay; RabbitMQ для routing-heavy work queues; in-process events для decoupling внутри одного app.
Когда применять
Consumer groups + offsets конфигурируйте тщательно (auto-commit прячет баги). Всегда handle poison messages (DLQ или dead-letter topic). Idempotent consumers — at-least-once delivery норма. Для @Async сконфигурируйте bounded executor (дефолт unbounded — OOM под нагрузкой).
Типичные ошибки
Ловушки Spring AMQP (RabbitMQ): auto-commit Kafka offsets до обработки (тихая потеря данных); @Async с дефолтным executor (unbounded thread pool); нет DLQ (poison messages блокируют consumers навсегда); @Scheduled на single-instance cron в multi-replica деплое (запускается N раз — Shedlock или k8s CronJob).