Spring WebFlux · AsyncAPI Specification

Spring WebFlux WebSocket API

Version 6.2.0

AsyncAPI specification describing WebSocket communication patterns for Spring WebFlux applications. Spring WebFlux provides reactive WebSocket support via WebSocketHandler and WebSocketSession, enabling full-duplex, bidirectional messaging between clients and servers.

View Spec View on GitHub JavaMicroservicesNon-Blocking IOReactive ProgrammingREST APISpring BootSpring FrameworkWebFluxAsyncAPIWebhooksEvents

Channels

websocketSession
WebSocket channel mapped via Spring WebFlux WebSocketHandlerAdapter. A WebSocketSession is established on connection and provides reactive inbound() and outbound() message streams.
stompBroker
STOMP over WebSocket channel. Spring WebFlux integrates with STOMP messaging protocol for topic subscriptions, queued messages, and message broker relay.

Messages

TextMessage
WebSocket Text Message
A UTF-8 encoded text data frame (opcode 0x1)
BinaryMessage
WebSocket Binary Message
A binary data frame (opcode 0x2)
PingMessage
WebSocket Ping Frame
A control ping frame (opcode 0x9) for keep-alive
PongMessage
WebSocket Pong Frame
A control pong frame (opcode 0xA) in response to ping
CloseMessage
WebSocket Close Frame
A control close frame (opcode 0x8) to initiate connection closure
StompMessage
STOMP Frame
A STOMP protocol frame for topic messaging over WebSocket

Servers

ws
production
Spring WebFlux WebSocket endpoint
wss
secure
Secure Spring WebFlux WebSocket endpoint (TLS)

AsyncAPI Specification

Raw ↑
asyncapi: 3.0.0
info:
  title: Spring WebFlux WebSocket API
  version: 6.2.0
  description: >-
    AsyncAPI specification describing WebSocket communication patterns for
    Spring WebFlux applications. Spring WebFlux provides reactive WebSocket
    support via WebSocketHandler and WebSocketSession, enabling full-duplex,
    bidirectional messaging between clients and servers.
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0
  externalDocs:
    url: https://docs.spring.io/spring-framework/reference/web/webflux-websocket.html
    description: Spring WebFlux WebSocket Documentation

servers:
  production:
    host: '{host}:{port}'
    protocol: ws
    description: Spring WebFlux WebSocket endpoint
    variables:
      host:
        default: localhost
        description: Application host
      port:
        default: '8080'
        description: Application port
  secure:
    host: '{host}:{port}'
    protocol: wss
    description: Secure Spring WebFlux WebSocket endpoint (TLS)
    variables:
      host:
        default: localhost
        description: Application host
      port:
        default: '8443'
        description: Application port

channels:
  websocketSession:
    address: /ws
    description: >-
      WebSocket channel mapped via Spring WebFlux WebSocketHandlerAdapter.
      A WebSocketSession is established on connection and provides reactive
      inbound() and outbound() message streams.
    messages:
      textMessage:
        $ref: '#/components/messages/TextMessage'
      binaryMessage:
        $ref: '#/components/messages/BinaryMessage'
      pingMessage:
        $ref: '#/components/messages/PingMessage'
      pongMessage:
        $ref: '#/components/messages/PongMessage'
      closeMessage:
        $ref: '#/components/messages/CloseMessage'

  stompBroker:
    address: /stomp
    description: >-
      STOMP over WebSocket channel. Spring WebFlux integrates with STOMP messaging
      protocol for topic subscriptions, queued messages, and message broker relay.
    messages:
      stompMessage:
        $ref: '#/components/messages/StompMessage'

operations:
  sendTextMessage:
    action: send
    channel:
      $ref: '#/channels/websocketSession'
    summary: Send Text Message
    description: >-
      Client sends a text message over the WebSocket connection.
      In Spring WebFlux, this corresponds to WebSocketSession.send(publisher).
    messages:
      - $ref: '#/components/messages/TextMessage'

  receiveTextMessage:
    action: receive
    channel:
      $ref: '#/channels/websocketSession'
    summary: Receive Text Message
    description: >-
      Server receives a text message from the client.
      In Spring WebFlux, WebSocketSession.receive() returns a Flux<WebSocketMessage>.
    messages:
      - $ref: '#/components/messages/TextMessage'

  sendBinaryMessage:
    action: send
    channel:
      $ref: '#/channels/websocketSession'
    summary: Send Binary Message
    description: Send a binary data frame over the WebSocket connection.
    messages:
      - $ref: '#/components/messages/BinaryMessage'

  receiveBinaryMessage:
    action: receive
    channel:
      $ref: '#/channels/websocketSession'
    summary: Receive Binary Message
    description: Receive a binary data frame from the WebSocket connection.
    messages:
      - $ref: '#/components/messages/BinaryMessage'

  subscribeToTopic:
    action: send
    channel:
      $ref: '#/channels/stompBroker'
    summary: Subscribe to Topic
    description: STOMP SUBSCRIBE frame to subscribe to a topic or queue.
    messages:
      - $ref: '#/components/messages/StompMessage'

  receiveTopicMessage:
    action: receive
    channel:
      $ref: '#/channels/stompBroker'
    summary: Receive Topic Message
    description: Receive a STOMP MESSAGE frame from a subscribed topic.
    messages:
      - $ref: '#/components/messages/StompMessage'

components:
  messages:
    TextMessage:
      name: TextMessage
      title: WebSocket Text Message
      summary: A UTF-8 encoded text data frame (opcode 0x1)
      contentType: text/plain
      payload:
        $ref: '#/components/schemas/TextPayload'

    BinaryMessage:
      name: BinaryMessage
      title: WebSocket Binary Message
      summary: A binary data frame (opcode 0x2)
      contentType: application/octet-stream
      payload:
        $ref: '#/components/schemas/BinaryPayload'

    PingMessage:
      name: PingMessage
      title: WebSocket Ping Frame
      summary: A control ping frame (opcode 0x9) for keep-alive
      payload:
        $ref: '#/components/schemas/ControlPayload'

    PongMessage:
      name: PongMessage
      title: WebSocket Pong Frame
      summary: A control pong frame (opcode 0xA) in response to ping
      payload:
        $ref: '#/components/schemas/ControlPayload'

    CloseMessage:
      name: CloseMessage
      title: WebSocket Close Frame
      summary: A control close frame (opcode 0x8) to initiate connection closure
      payload:
        $ref: '#/components/schemas/ClosePayload'

    StompMessage:
      name: StompMessage
      title: STOMP Frame
      summary: A STOMP protocol frame for topic messaging over WebSocket
      contentType: application/json
      payload:
        $ref: '#/components/schemas/StompPayload'

  schemas:
    TextPayload:
      type: object
      properties:
        content:
          type: string
          description: UTF-8 text content of the message
        sessionId:
          type: string
          description: WebSocketSession identifier

    BinaryPayload:
      type: object
      properties:
        data:
          type: string
          format: binary
          description: Binary data content

    ControlPayload:
      type: object
      properties:
        applicationData:
          type: string
          description: Optional application data in control frame

    ClosePayload:
      type: object
      properties:
        statusCode:
          type: integer
          description: RFC 6455 close status code (e.g. 1000 Normal Closure)
        reason:
          type: string
          description: Human-readable reason for closure

    StompPayload:
      type: object
      properties:
        command:
          type: string
          enum: [CONNECT, CONNECTED, SUBSCRIBE, UNSUBSCRIBE, SEND, MESSAGE, ACK, NACK, DISCONNECT, ERROR]
          description: STOMP command
        headers:
          type: object
          additionalProperties:
            type: string
          description: STOMP frame headers
        body:
          type: string
          description: STOMP frame body