Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Push-брокер (Message Broker)
Push-брокер — это компонент в архитектуре асинхронных систем, который активно отправляет ("пушит") сообщения подписчикам, как только они появляются в очереди. Это противоположность pull-модели, где потребители сами запрашивают сообщения.
Как работает push-брокер
в push-модели брокер сообщений:
// Пример push-брокера с RabbitMQ
public class PushBrokerExample {
public static void main(String[] args) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
// Объявляем очередь
channel.queueDeclare("task_queue", true, false, false, null);
// Consumer-подписчик ЖДЁТ, пока брокер пушит ему сообщения
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
String message = new String(delivery.getBody());
System.out.println("Получено сообщение: " + message);
// Подтверждаем обработку
channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
};
// Регистрируем слушателя - брокер СРАЗУ начнёт пушить сообщения
channel.basicConsume("task_queue", false, deliverCallback, consumerTag -> {});
}
}
Характеристики push-модели
Преимущества:
- Минимальная задержка — сообщение доставляется мгновенно
- Простота — подписчик просто подписывается и ждёт
- Нет доп. опросов — экономим ресурсы
Недостатки:
- Backpressure — если подписчик медленный, брокер может перегрузиться
- Потеря контроля — сложнее управлять скоростью потребления
Pull vs Push
// PULL-модель (Kafka, потребитель инициирует запрос)
public class PullBrokerExample {
public static void main(String[] args) {
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Collections.singleton("topic"));
// Сами запрашиваем сообщения с интервалом
ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
for (ConsumerRecord<String, String> record : records) {
System.out.println(record.value());
}
}
}
// PUSH-модель (RabbitMQ, брокер отправляет сам)
public class PushBrokerPattern {
public static void main(String[] args) throws Exception {
Channel channel = connection.createChannel();
// basicConsume регистрирует callback, брокер будет пушить
channel.basicConsume("queue", true, (tag, delivery) -> {
System.out.println("Получено: " + new String(delivery.getBody()));
}, tag -> {});
}
}
Примеры push-брокеров
- RabbitMQ — классический push-брокер с поддержкой backpressure
- Redis Streams — может работать в push-режиме через подписку
- AWS SQS (long polling) — имитирует push за счёт long-polling запросов
Обработка backpressure
// Контролируем скорость доставки
channel.basicQos(10); // Брокер отправляет максимум 10 сообщений одновременно
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
String message = new String(delivery.getBody());
processMessage(message); // Долгая операция
channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
};
Push-брокеры идеальны для систем реального времени, где важна минимальная задержка и немедленная доставка сообщений, но требуют правильной обработки backpressure для стабильности.