AMQP · AsyncAPI Specification

AMQP Messaging API

Version 1.0.0

AsyncAPI specification for AMQP (Advanced Message Queuing Protocol) messaging patterns including publish/subscribe, request/reply, and point-to-point messaging. AMQP 0-9-1 defines exchanges, queues, and bindings as the core building blocks for flexible message routing.

View Spec View on GitHub AMQPAsynchronousMessage QueueMessagingMiddlewareOpen StandardPublish SubscribeAsyncAPIWebhooksEvents

Channels

orderCreated
Publish/subscribe channel for order creation events. Messages are published to a topic exchange and routed to all bound queues.
orderProcessing
Point-to-point channel for order processing. Messages are sent to a direct exchange and consumed by a single worker from a shared queue.
orderStatusRequest
Request channel for the request/reply pattern. Clients send requests with a reply-to header and correlation ID for response matching.
orderStatusReply
Reply channel for the request/reply pattern. The server publishes responses to the client-specified reply-to queue with the matching correlation ID.
notifications
Fanout channel for broadcasting notifications to all subscribers. Uses a fanout exchange to deliver messages to every bound queue regardless of routing key.

Messages

OrderCreated
Order Created Event
Event published when a new order is created
OrderProcess
Order Processing Command
Command to process an order
OrderStatusRequest
Order Status Request
Request for the current status of an order
OrderStatusReply
Order Status Reply
Reply containing the current status of an order
Notification
Notification Message
A notification broadcast to all subscribers

Servers

amqp
production
Production AMQP broker

AsyncAPI Specification

Raw ↑
asyncapi: 3.0.0
info:
  title: AMQP Messaging API
  version: 1.0.0
  description: >-
    AsyncAPI specification for AMQP (Advanced Message Queuing Protocol)
    messaging patterns including publish/subscribe, request/reply, and
    point-to-point messaging. AMQP 0-9-1 defines exchanges, queues, and
    bindings as the core building blocks for flexible message routing.
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0

servers:
  production:
    host: amqp.example.com:5672
    protocol: amqp
    protocolVersion: 0.9.1
    description: Production AMQP broker
    security:
      - type: userPassword
    tags:
      - name: production

channels:
  orderCreated:
    address: orders.created
    description: >-
      Publish/subscribe channel for order creation events. Messages are
      published to a topic exchange and routed to all bound queues.
    messages:
      orderCreatedMessage:
        $ref: '#/components/messages/OrderCreated'
    bindings:
      amqp:
        is: routingKey
        exchange:
          name: orders
          type: topic
          durable: true
          autoDelete: false
        queue:
          name: orders.created
          durable: true
          exclusive: false
          autoDelete: false

  orderProcessing:
    address: orders.process
    description: >-
      Point-to-point channel for order processing. Messages are sent to a
      direct exchange and consumed by a single worker from a shared queue.
    messages:
      orderProcessMessage:
        $ref: '#/components/messages/OrderProcess'
    bindings:
      amqp:
        is: routingKey
        exchange:
          name: orders.direct
          type: direct
          durable: true
          autoDelete: false
        queue:
          name: orders.process.queue
          durable: true
          exclusive: false
          autoDelete: false

  orderStatusRequest:
    address: orders.status.request
    description: >-
      Request channel for the request/reply pattern. Clients send requests
      with a reply-to header and correlation ID for response matching.
    messages:
      orderStatusRequestMessage:
        $ref: '#/components/messages/OrderStatusRequest'
    bindings:
      amqp:
        is: routingKey
        exchange:
          name: orders.rpc
          type: direct
          durable: true
          autoDelete: false
        queue:
          name: orders.status.request.queue
          durable: true
          exclusive: false
          autoDelete: false

  orderStatusReply:
    address: orders.status.reply
    description: >-
      Reply channel for the request/reply pattern. The server publishes
      responses to the client-specified reply-to queue with the matching
      correlation ID.
    messages:
      orderStatusReplyMessage:
        $ref: '#/components/messages/OrderStatusReply'
    bindings:
      amqp:
        is: routingKey
        exchange:
          name: ''
          type: direct
          durable: true
          autoDelete: false
        queue:
          name: amq.rabbitmq.reply-to
          durable: false
          exclusive: true
          autoDelete: true

  notifications:
    address: notifications.#
    description: >-
      Fanout channel for broadcasting notifications to all subscribers.
      Uses a fanout exchange to deliver messages to every bound queue
      regardless of routing key.
    messages:
      notificationMessage:
        $ref: '#/components/messages/Notification'
    bindings:
      amqp:
        is: routingKey
        exchange:
          name: notifications.fanout
          type: fanout
          durable: true
          autoDelete: false

operations:
  publishOrderCreated:
    action: send
    channel:
      $ref: '#/channels/orderCreated'
    summary: Publish an order created event
    description: >-
      Publishes an order created event to the topic exchange. All consumers
      with matching routing key bindings will receive the message.
    bindings:
      amqp:
        deliveryMode: 2
        mandatory: true

  consumeOrderCreated:
    action: receive
    channel:
      $ref: '#/channels/orderCreated'
    summary: Subscribe to order created events
    description: >-
      Subscribes to order created events from the topic exchange.

  sendOrderForProcessing:
    action: send
    channel:
      $ref: '#/channels/orderProcessing'
    summary: Send an order for processing
    description: >-
      Sends an order to the processing queue. Only one consumer will
      process each message (competing consumers pattern).
    bindings:
      amqp:
        deliveryMode: 2
        mandatory: true

  processOrder:
    action: receive
    channel:
      $ref: '#/channels/orderProcessing'
    summary: Receive an order for processing
    bindings:
      amqp:
        ack: true
        prefetchCount: 1

  requestOrderStatus:
    action: send
    channel:
      $ref: '#/channels/orderStatusRequest'
    summary: Request the status of an order
    description: >-
      Sends a request for order status using the request/reply pattern.
      The reply-to queue and correlation ID are set in message properties.
    bindings:
      amqp:
        deliveryMode: 2

  receiveOrderStatusReply:
    action: receive
    channel:
      $ref: '#/channels/orderStatusReply'
    summary: Receive the order status reply

  broadcastNotification:
    action: send
    channel:
      $ref: '#/channels/notifications'
    summary: Broadcast a notification to all subscribers
    bindings:
      amqp:
        deliveryMode: 1

components:
  messages:
    OrderCreated:
      name: OrderCreated
      title: Order Created Event
      summary: Event published when a new order is created
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/commonHeaders'
      payload:
        type: object
        required:
          - orderId
          - customerId
          - createdAt
        properties:
          orderId:
            type: string
            format: uuid
            description: Unique identifier for the order
          customerId:
            type: string
            description: Identifier of the customer who placed the order
          items:
            type: array
            items:
              type: object
              properties:
                productId:
                  type: string
                quantity:
                  type: integer
                  minimum: 1
                price:
                  type: number
                  format: double
          totalAmount:
            type: number
            format: double
          currency:
            type: string
            pattern: ^[A-Z]{3}$
          createdAt:
            type: string
            format: date-time

    OrderProcess:
      name: OrderProcess
      title: Order Processing Command
      summary: Command to process an order
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/commonHeaders'
      payload:
        type: object
        required:
          - orderId
          - action
        properties:
          orderId:
            type: string
            format: uuid
          action:
            type: string
            enum:
              - validate
              - fulfill
              - ship
              - cancel
          priority:
            type: integer
            minimum: 0
            maximum: 9

    OrderStatusRequest:
      name: OrderStatusRequest
      title: Order Status Request
      summary: Request for the current status of an order
      contentType: application/json
      correlationId:
        location: $message.header#/correlationId
      traits:
        - $ref: '#/components/messageTraits/commonHeaders'
      payload:
        type: object
        required:
          - orderId
        properties:
          orderId:
            type: string
            format: uuid

    OrderStatusReply:
      name: OrderStatusReply
      title: Order Status Reply
      summary: Reply containing the current status of an order
      contentType: application/json
      correlationId:
        location: $message.header#/correlationId
      payload:
        type: object
        required:
          - orderId
          - status
        properties:
          orderId:
            type: string
            format: uuid
          status:
            type: string
            enum:
              - pending
              - processing
              - shipped
              - delivered
              - cancelled
          updatedAt:
            type: string
            format: date-time
          estimatedDelivery:
            type: string
            format: date-time

    Notification:
      name: Notification
      title: Notification Message
      summary: A notification broadcast to all subscribers
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/commonHeaders'
      payload:
        type: object
        required:
          - type
          - message
          - timestamp
        properties:
          type:
            type: string
            enum:
              - info
              - warning
              - error
              - alert
          message:
            type: string
          timestamp:
            type: string
            format: date-time
          metadata:
            type: object
            additionalProperties: true

  messageTraits:
    commonHeaders:
      headers:
        type: object
        properties:
          correlationId:
            type: string
            format: uuid
            description: Unique identifier for correlating request/reply messages
          messageId:
            type: string
            format: uuid
            description: Unique identifier for the message
          timestamp:
            type: string
            format: date-time
            description: Timestamp when the message was created
          contentType:
            type: string
            description: MIME type of the message body
          replyTo:
            type: string
            description: Queue name for reply messages in request/reply pattern
          expiration:
            type: string
            description: Message TTL in milliseconds
          priority:
            type: integer
            minimum: 0
            maximum: 9
            description: Message priority (0-9)
          deliveryMode:
            type: integer
            enum:
              - 1
              - 2
            description: 1 for non-persistent, 2 for persistent delivery
          appId:
            type: string
            description: Identifier of the application that produced the message