Ответ
Брокеры сообщений (очереди) — это промежуточное ПО для асинхронного обмена сообщениями между компонентами системы. Они обеспечивают слабое связывание и надёжную доставку.
Ключевые решаемые задачи:
- Асинхронная обработка: Отправитель и получатель работают независимо.
- Буферизация и балансировка нагрузки: Очередь накапливает сообщения, если потребители не успевают.
- Повышение отказоустойчивости: Сообщения сохраняются (persisted) и могут быть обработаны после сбоя.
- Гарантия доставки: Поддержка подтверждений (acknowledgments) и повторных попыток.
Типичные сценарии применения:
- Фоновая обработка задач:
- Генерация отчётов.
- Отправка email или push-уведомлений.
- Обработка загруженных файлов.
- Интеграция микросервисов:
- Вместо синхронных HTTP-вызовов используется асинхронная коммуникация через события.
- Сбор и агрегация логов/метрик.
Пример с 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: Управляемые облачные сервисы очередей.