Какие задачи решают брокеры сообщений (очереди) и когда их стоит применять?

«Какие задачи решают брокеры сообщений (очереди) и когда их стоит применять?» — вопрос из категории Брокеры сообщений, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Брокеры сообщений (очереди) — это промежуточное ПО для асинхронного обмена сообщениями между компонентами системы. Они обеспечивают слабое связывание и надёжную доставку.

Ключевые решаемые задачи:

  • Асинхронная обработка: Отправитель и получатель работают независимо.
  • Буферизация и балансировка нагрузки: Очередь накапливает сообщения, если потребители не успевают.
  • Повышение отказоустойчивости: Сообщения сохраняются (persisted) и могут быть обработаны после сбоя.
  • Гарантия доставки: Поддержка подтверждений (acknowledgments) и повторных попыток.

Типичные сценарии применения:

  1. Фоновая обработка задач:
    • Генерация отчётов.
    • Отправка email или push-уведомлений.
    • Обработка загруженных файлов.
  2. Интеграция микросервисов:
    • Вместо синхронных HTTP-вызовов используется асинхронная коммуникация через события.
  3. Сбор и агрегация логов/метрик.

Пример с RabbitMQ и Spring Boot:

// Конфигурация очереди
@Configuration
public class RabbitConfig {
    @Bean
    public Queue taskQueue() {
        return new Queue("tasks", true); // durable очередь
    }
}

// Отправитель (Producer)
@Component
public class TaskSender {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void sendTask(String task) {
        rabbitTemplate.convertAndSend("tasks", task);
    }
}

// Получатель (Consumer)
@Component
public class TaskReceiver {
    @RabbitListener(queues = "tasks")
    public void receiveTask(String task) {
        System.out.println("Processing task: " + task);
        // Логика обработки
    }
}

Популярные решения:

  • RabbitMQ: Классический брокер на основе AMQP, подходит для сложных маршрутизаций (routing).
  • Apache Kafka: Распределённый потоковый平台 (streaming platform) для обработки больших потоков событий с высокой пропускной способностью.
  • AWS SQS / Google Pub/Sub: Управляемые облачные сервисы очередей.