🤔 Что такое брокеры сообщений?Это программные системы, которые позволяют обмениваться данными между разными компонентами приложения или между различными приложениями. Они действуют как посредники, принимая сообщения от отправителей (producers) и доставляя их получателям (consumers).
🚩
Основные функции брокеров сообщений🟠
Прием и маршрутизация сообщенийСообщения отправляются от одного компонента и доставляются нужному получателю. Брокер определяет, куда отправить сообщение, используя темы (topics), очереди (queues) или маршруты (routing keys).
🟠
Асинхронное взаимодействиеОтправитель может передать сообщение, не дожидаясь его обработки, что повышает производительность системы.
🟠
Очереди сообщенийЕсли получатель временно недоступен, сообщение сохраняется в очереди до тех пор, пока оно не будет доставлено.
🟠
Гарантированная доставкаНекоторые брокеры предоставляют механизмы подтверждения получения сообщений (acknowledgment), чтобы избежать их потери.
🟠
Распределение нагрузкиСообщения могут быть обработаны несколькими получателями, что позволяет распределить нагрузку между ними.
🟠
Фильтрация и маршрутизацияСообщения доставляются только тем потребителям, которые их ожидают, используя фильтры или ключи маршрутизации.
🚩
Примеры использования брокеров сообщений🟠
МикросервисыКомпоненты приложения обмениваются данными через брокер, что позволяет им оставаться изолированными и независимыми.
🟠
Логирование и мониторингСбор логов и метрик от множества источников с их дальнейшей обработкой.
🟠
Управление задачамиПостановка задач в очередь для выполнения одним или несколькими воркерами.
🟠
Интеграция системСвязывание разнородных систем, которые обмениваются данными.
🚩
Примеры брокеров сообщений🟠
RabbitMQПротокол: AMQP (Advanced Message Queuing Protocol). Поддерживает очереди, маршрутизацию, подтверждения доставки. Хорошо подходит для сложных сценариев с разными типами маршрутизации.
🟠
Apache KafkaПротокол: Проприетарный. Отличается высокой производительностью и надежностью. Используется для потоковой обработки данных, аналитики в реальном времени.
🟠
Redis (Pub/Sub)Протокол: Redis. Простая и быстрая модель pub/sub. Хорошо подходит для временных сообщений без сохранения состояния.
🟠
ActiveMQПротокол: AMQP, STOMP, MQTT. Гибкий и совместимый с различными сценариями.
🟠
NATSЛегковесный и быстрый брокер для приложений, требующих низкой задержки.
🚩
Как работают брокеры сообщенийProducers (отправители) отправляют сообщение в брокер.
Брокер размещает сообщение в соответствующей очереди или теме.
Consumers (получатели) получают сообщение: Либо сразу, если они активны. Либо позже, если оно сохраняется в очереди.
🚩
Пример использования RabbitMQ1⃣Отправитель публикует сообщение в очередь:
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')
connection.close()
2⃣Получатель забирает сообщение из очереди:
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
def callback(ch, method, properties, body):
print(f"Received {body}")
channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True)
channel.start_consuming()
🚩
Плюсы использования➕
Разделение ответственностиКомпоненты системы сосредотачиваются на своих задачах, а не на доставке данных.
➕
МасштабируемостьЛегко добавлять новых потребителей или отправителей.
➕
Устойчивость к сбоямБрокеры обеспечивают сохранность сообщений, даже если один из компонентов временно недоступен.
➕
ГибкостьВозможность использовать различные стратегии маршрутизации и обработки данных.
Ставь 👍 и забирай 📚 Базу знаний