🤔 Что такое брокеры сообщений?Это программные системы, которые позволяют обмениваться данными между разными компонентами приложения или между различными приложениями. Они действуют как посредники, принимая сообщения от отправителей (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()
🚩Плюсы использования➕Разделение ответственностиКомпоненты системы сосредотачиваются на своих задачах, а не на доставке данных.
➕МасштабируемостьЛегко добавлять новых потребителей или отправителей.
➕Устойчивость к сбоямБрокеры обеспечивают сохранность сообщений, даже если один из компонентов временно недоступен.
➕ГибкостьВозможность использовать различные стратегии маршрутизации и обработки данных.
Ставь 👍 и забирай 📚 Базу знаний