Ответ
Консьюмер (потребитель) — это компонент, который подписывается на источник данных (очередь, топик) и обрабатывает поступающие сообщения. Он является ключевой частью асинхронной, событийно-ориентированной архитектуры (например, с использованием Apache Kafka, RabbitMQ).
Как работает консьюмер:
- Подписка: Консьюмер указывает, из какой очереди или топика он хочет получать сообщения.
- Получение сообщений: Работает по модели pull (консьюмер сам запрашивает сообщения) или push (брокер сам отправляет сообщения).
- Обработка: Выполняет бизнес-логику на основе содержимого сообщения (сохранение в БД, вызов другого сервиса, логирование).
- Подтверждение (Acknowledgment): После успешной обработки консьюмер отправляет брокеру подтверждение (ACK), что позволяет брокеру удалить сообщение из очереди. Это гарантирует доставку "at-least-once".
Пример консьюмера для Apache Kafka на Python:
from kafka import KafkaConsumer
# Создание консьюмера, подписанного на топик 'orders'
consumer = KafkaConsumer(
'orders',
bootstrap_servers='localhost:9092',
group_id='order-processors', # Группа потребителей для балансировки нагрузки
auto_offset_reset='earliest', # С чего начать чтение, если смещение не найдено
enable_auto_commit=False # Отключаем автоматическое подтверждение
)
for message in consumer:
print(f"Получен заказ: {message.value.decode('utf-8')} из партиции {message.partition}")
# ... обработка заказа ...
consumer.commit() # Вручную подтверждаем обработку сообщения
Зачем это нужно? Консьюмеры обеспечивают развязку (decoupling) сервисов, масштабируемость (можно запустить несколько экземпляров в consumer group) и отказоустойчивость (сообщения не теряются при падении обработчика).