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

Каналы и операции

Channels — каналы

channels — объект «адрес канала → описание канала». Адрес — это имя топика, очереди, маршрутизирующего ключа или путь; он может содержать параметры в фигурных скобках.

channels:
  orders.created: ...
  orders/{orderId}/status: ...
  user.{userId}.notifications: ...

Channel Item

ПолеОписание
descriptionОписание канала.
subscribeОперация: приложение отправляет сообщения в канал (другие подписываются на них).
publishОперация: приложение принимает сообщения из канала (другие публикуют их).
parametersПараметры адреса канала.
bindingsНастройки канала, специфичные для протокола.
$refСсылка на описание канала в другом месте.

Как понимать publish и subscribe

В AsyncAPI 2.x названия операций описаны с точки зрения того, кто работает с приложением:

Операция в документеЧто делает само приложениеЧто могут делать другие
subscribeотправляет сообщенияподписаться и получать их
publishпринимает сообщенияпубликовать их для приложения

Например, сервис заказов, который рассылает событие «заказ создан», описывает канал orders.created операцией subscribe; а команду «отменить заказ», которую он получает от других, — операцией publish. Эта «перевёрнутая» логика — частый источник ошибок; в AsyncAPI 3.0 её заменили явными действиями send и receive.

Operation — операция

ПолеОписание
operationIdУникальный идентификатор операции; генераторы кода делают из него имя метода.
summary, descriptionКраткое и подробное описание.
tagsТеги.
externalDocsВнешняя документация.
bindingsНастройки операции для протокола (например, группа потребителей Kafka).
traitsОбщие части операций (Operation Trait), которые сливаются с операцией.
messageСообщение операции или несколько сообщений через oneOf.
asyncapi: 2.6.0
info:
  title: Сервис заказов
  version: 1.0.0
channels:
  orders.created:
    description: События о созданных заказах
    subscribe:
      operationId: publishOrderCreated
      summary: Сервис сообщает о созданном заказе
      message:
        $ref: '#/components/messages/OrderCreated'
  orders.commands:
    description: Команды для сервиса заказов
    publish:
      operationId: handleOrderCommand
      summary: Сервис принимает команды
      message:
        oneOf:
          - $ref: '#/components/messages/CancelOrder'
          - $ref: '#/components/messages/ConfirmOrder'
components:
  messages:
    OrderCreated:
      name: OrderCreated
      payload:
        type: object
        required: [orderId]
        properties:
          orderId:
            type: string
            format: uuid
    CancelOrder:
      name: CancelOrder
      payload:
        type: object
        properties:
          orderId:
            type: string
          reason:
            type: string
    ConfirmOrder:
      name: ConfirmOrder
      payload:
        type: object
        properties:
          orderId:
            type: string

Parameters — параметры канала

Параметр описывает часть адреса канала в фигурных скобках.

ПолеОписание
descriptionОписание параметра.
schemaСхема значения (обычно строка с ограничениями).
locationВыражение, откуда берётся значение в сообщении, например $message.payload#/user/id.
channels:
  user.{userId}.notifications:
    parameters:
      userId:
        description: Идентификатор пользователя
        schema:
          type: string
          format: uuid
        location: $message.payload#/userId
    subscribe:
      message:
        payload:
          type: object
          properties:
            userId:
              type: string
            text:
              type: string

Operation Traits — общие части операций

Trait позволяет вынести повторяющиеся поля (например, bindings Kafka) и подключить их к нескольким операциям через traits. Значения самой операции имеют приоритет над значениями trait.

components:
  operationTraits:
    kafkaConsumer:
      bindings:
        kafka:
          groupId:
            type: string
            enum: [orders-service]
channels:
  orders.commands:
    publish:
      traits:
        - $ref: '#/components/operationTraits/kafkaConsumer'
      message:
        payload:
          type: object

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