Ответ
Брокеры сообщений — это ключевой компонент для построения распределенных и асинхронных систем. Они позволяют сервисам общаться, не зная друг о друге напрямую, что повышает отказоустойчивость и масштабируемость.
Основные брокеры, используемые с Python:
-
RabbitMQ Один из самых популярных брокеров, реализующий протокол AMQP. Предоставляет гибкие возможности маршрутизации сообщений через обменники (exchanges) и очереди (queues). Идеален для сложных сценариев, где важна гарантированная доставка и порядок сообщений.
Пример с библиотекой
pika
:import pika connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() channel.queue_declare(queue='task_queue', durable=True) channel.basic_publish( exchange='', routing_key='task_queue', body='New task data', properties=pika.BasicProperties(delivery_mode=2) # make message persistent ) connection.close()
-
Apache Kafka Распределенная стриминговая платформа. В отличие от традиционных брокеров, Kafka работает как распределенный лог событий, что обеспечивает высочайшую пропускную способность и отказоустойчивость. Используется для обработки потоков данных в реальном времени, сбора логов и аналитики.
Пример с
confluent-kafka
:from confluent_kafka import Producer producer = Producer({'bootstrap.servers': 'localhost:9092'}) producer.produce('user-logins', key='user1', value='{"status": "success"}') producer.flush()
-
Redis (Pub/Sub) Redis, будучи в первую очередь in-memory хранилищем, предоставляет простой механизм Publish/Subscribe. Он не гарантирует доставку сообщений (если подписчик офлайн, сообщение теряется), но отлично подходит для легковесных систем уведомлений и задач, где скорость важнее надежности.
Пример с
redis-py
:import redis r = redis.Redis() # Publisher r.publish('notifications', 'User logged in')
Системы очередей задач:
- Celery — это не брокер, а распределенная очередь задач, которая использует брокер (RabbitMQ или Redis) для передачи сообщений. Celery предоставляет высокоуровневый API для выполнения фоновых задач, отложенных вызовов и периодических работ.