В чем разница между RabbitMQ и REST API?

«В чем разница между RabbitMQ и REST API?» — вопрос из категории Архитектура, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

RabbitMQ — это брокер сообщений, реализующий протокол AMQP для асинхронного обмена сообщениями между сервисами. REST API — это архитектурный стиль для синхронного взаимодействия по HTTP.

Ключевые отличия:

Аспект RabbitMQ REST API
Модель Асинхронная (публикация/подписка, очереди) Синхронная (запрос-ответ)
Протокол AMQP, MQTT, STOMP HTTP/HTTPS
Связь Развязанная (сервисы не знают друг о друге) Прямая (клиент знает endpoint сервера)
Гарантии Подтверждение доставки, persistence, очереди Зависит от реализации (обычно at-most-once)
Использование Сложные workflows, отложенная обработка, event-driven архитектура Простые CRUD-операции, веб-сервисы, мобильные приложения

Пример REST API (синхронный):

GET /api/users/123 HTTP/1.1
Host: api.example.com
Accept: application/json

Пример RabbitMQ (асинхронный, Python с pika):

# Публикация
channel.basic_publish(
    exchange='orders',
    routing_key='new_order',
    body=json.dumps(order_data),
    properties=pika.BasicProperties(delivery_mode=2)  # persistent
)

# Потребление
def callback(ch, method, properties, body):
    order = json.loads(body)
    process_order(order)
    ch.basic_ack(delivery_tag=method.delivery_tag)

channel.basic_consume(queue='order_queue', on_message_callback=callback)

Когда использовать:

  • REST API: когда нужен немедленный ответ, простые операции, кэширование.
  • RabbitMQ: для длительных задач, балансировки нагрузки, гарантированной доставки, event sourcing.