AMQP

AMQP (Advanced Message Queuing Protocol) — открытый бинарный протокол для message brokers. Разработан JPMorgan Chase (2003), потом OASIS. Две несовместимые версии: AMQP 0-9-1 (RabbitMQ) и AMQP 1.0 (Azure, ActiveMQ, Solace).

0-9-1 vs 1.0 (внимание, разные)

AMQP 0-9-1AMQP 1.0
Год20082011 (ISO 2014)
Модельexchange+queue+bindinglink → node
Broker обязателенданет (P2P возможно)
ИспользуетRabbitMQAzure Service Bus, ActiveMQ Artemis, Solace

Совместимости между ними — нет. Клиент 0-9-1 не подключится к 1.0-серверу.

AMQP 0-9-1 модель

[Producer] → [Exchange] → binding(routing_key) → [Queue] → [Consumer]

Термины: connection (TCP), channel (мультиплексор внутри connection), exchange, queue, binding, routing key, consumer.

Class + Method + Frame

# frame types
1 = METHOD
2 = HEADER
3 = BODY
4 = HEARTBEAT

# frame формат
| type:byte | channel:short | size:long | payload | 0xCE |

# method example: basic.publish
class-id=60 (basic), method-id=40 (publish)
  exchange:"logs"
  routing-key:"error"
  mandatory:1
  immediate:0

Handshake

C → S: "AMQP\0\0\9\1"                    # magic
S → C: connection.start
C → S: connection.start-ok (auth)
S → C: connection.tune (max-channel, frame-max, heartbeat)
C → S: connection.tune-ok
C → S: connection.open (vhost="/")
S → C: connection.open-ok
# теперь channel.open, basic.publish, ...

AMQP 1.0 модель

Не exchange/queue — вместо этого links к nodes. Sender attaches link к node, шлёт сообщения. Более гибко, но иная семантика.

Session (мультиплексор)
  ├── Sender-link → target="queue-A"
  └── Receiver-link ← source="queue-B"

Кто использует

Порт

Плюсы AMQP как стандарта

Минусы

См. также

← на главную