Вопрос проверяет понимание модели взаимодействия «публикация/подписка» и её использования в RabbitMQ.
Pub/sub (publish/subscribe) — это асинхронная модель взаимодействия, где производитель публикует сообщение на определённую тему, и все подписчики этой темы получают его одновременно. Этот подход часто используется в микросервисах для организации событийного взаимодействия.
Pub/sub — это мощный способ взаимодействия между системами:
Как работает:
Производитель публикует сообщение в exchange.
Exchange распределяет сообщение между подписанными очередями на основе типа обмена и ключа маршрутизации.
Потребители читают сообщения из своих очередей.
Типы обменов в RabbitMQ:
Fanout: Сообщение отправляется всем очередям, связанным с exchange.
Topic: Сообщение отправляется только очередям, соответствующим ключу маршрутизации.
Direct: Сообщение отправляется в очередь с точным совпадением ключа маршрутизации.
Пример кода:
Публикация сообщения:
channel.basic_publish(exchange='logs', routing_key='', body='Hello World!') Подписка потребителя:
channel.queue_bind(exchange='logs', queue='queue_name') Pub/sub — идеальная модель для событийных микросервисов, обеспечивающая гибкость и масштабируемость.