Ответ
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.