Документация / AsyncAPI

Сообщения

Message — сообщение

ПолеОписание
headersСхема заголовков сообщения (тип object).
payloadСхема полезной нагрузки.
correlationIdГде в сообщении находится идентификатор корреляции.
schemaFormatФормат схемы payload, если это не схема AsyncAPI (например, Avro).
contentTypeТип содержимого; по умолчанию — defaultContentType из корня.
nameМашиночитаемое имя сообщения.
titleНазвание для людей.
summary, descriptionКраткое и подробное описание.
tags, externalDocsТеги и внешняя документация.
bindingsНастройки сообщения для протокола (например, ключ Kafka).
examplesПримеры: объекты с headers и payload.
traitsОбщие части сообщений (Message Trait).
asyncapi: 2.6.0
info:
  title: Сервис заказов
  version: 1.0.0
channels:
  orders.paid:
    subscribe:
      message:
        $ref: '#/components/messages/OrderPaid'
components:
  messages:
    OrderPaid:
      name: OrderPaid
      title: Заказ оплачен
      summary: Отправляется, когда платёж по заказу подтверждён
      contentType: application/json
      correlationId:
        description: Идентификатор исходного запроса
        location: $message.header#/correlationId
      headers:
        type: object
        required: [messageId, correlationId]
        properties:
          messageId:
            type: string
            format: uuid
          correlationId:
            type: string
            format: uuid
      payload:
        type: object
        required: [orderId, amount, paidAt]
        properties:
          orderId:
            type: string
            format: uuid
          amount:
            type: number
            minimum: 0
          currency:
            type: string
            enum: [RUB, USD, EUR]
            default: RUB
          paidAt:
            type: string
            format: date-time
      examples:
        - headers:
            messageId: 2f1c5d0e-7a1b-4c3d-9e4f-000000000001
            correlationId: 9b2d7f40-1c3e-4a5b-8c6d-000000000002
          payload:
            orderId: 5f0c2b1e-8d4a-4c1e-9b7a-2f6d3e1a0c42
            amount: 1590
            currency: RUB
            paidAt: '2026-10-01T12:30:00Z'

Correlation ID

Идентификатор корреляции связывает сообщения одного обмена — например, запрос и ответ или цепочку событий.

ПолеОписание
descriptionОписание.
locationОбязательное. Выражение: $message.header#/путь или $message.payload#/путь.

Несколько сообщений в канале

Если в канал отправляются сообщения разных видов, они перечисляются через oneOf. Потребителю нужно различать их — удобно по имени в заголовке или полю-дискриминатору в payload.

channels:
  orders.events:
    subscribe:
      message:
        oneOf:
          - $ref: '#/components/messages/OrderCreated'
          - $ref: '#/components/messages/OrderPaid'
          - $ref: '#/components/messages/OrderCancelled'

Схемы в других форматах

schemaFormat позволяет описать payload схемой другого формата — например, Avro для Kafka:

components:
  messages:
    OrderCreatedAvro:
      schemaFormat: application/vnd.apache.avro;version=1.9.0
      payload:
        type: record
        name: OrderCreated
        fields:
          - name: orderId
            type: string
          - name: total
            type: double

По умолчанию schemaFormat — схема AsyncAPI (надмножество JSON Schema Draft 07).

Message Traits — общие части сообщений

Общие заголовки и настройки выносятся в components.messageTraits и подключаются к сообщениям через traits.

components:
  messageTraits:
    commonHeaders:
      headers:
        type: object
        properties:
          messageId:
            type: string
            format: uuid
          producedAt:
            type: string
            format: date-time
  messages:
    OrderCreated:
      traits:
        - $ref: '#/components/messageTraits/commonHeaders'
      payload:
        type: object

Рекомендации

  • имена событий — в прошедшем времени (OrderCreated, PaymentFailed), команды — в повелительном наклонении (CancelOrder);
  • в заголовки — технические поля: идентификатор сообщения, идентификатор корреляции, время, версия схемы;
  • схемы полезной нагрузки — в components.schemas и через $ref, с required и примерами;
  • указывайте ключ партиционирования Kafka (bindings.kafka.key), если важен порядок сообщений по сущности.

Обновлено: 30 сентября 2026 г.