Можно ли использовать брокер как маршрутизатор при синхронном взаимодействии двух систем

«Можно ли использовать брокер как маршрутизатор при синхронном взаимодействии двух систем» — вопрос из категории API и интеграции, который задают на 24% собеседований Бизнес Аналитик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, можно, но с оговорками. Брокер (например, RabbitMQ, Kafka) обычно используется для асинхронного взаимодействия, но можно эмулировать синхронность через Request-Reply паттерн.

Пример с RabbitMQ:

# Клиент отправляет запрос с временной очередью для ответа
channel.queue_declare(queue='request_queue', exclusive=True)
channel.basic_publish(
    exchange='',
    routing_key='request_queue',
    properties=pika.BasicProperties(reply_to='temp_reply_queue'),
    body='request_data'
)

# Сервер обрабатывает и отвечает в указанную очередь
def callback(ch, method, props, body):
    ch.basic_publish(
        exchange='',
        routing_key=props.reply_to,
        body='response_data'
    )

Нюансы:

  • Латентность выше, чем у прямого HTTP-вызова
  • Требуется обработка таймаутов
  • Усложняется отладка

Подходит для сценариев, где важна гарантированная доставка, а не минимальная задержка.