Skip to content

MQTT Bindings ​

MQTT (Message Queuing Telemetry Transport) is a lightweight, publish-subscribe network protocol designed for constrained devices and low-bandwidth, high-latency, or unreliable networks. It is the de-facto standard for IoT messaging. The generic AsyncAPI MQTT bindings provide a version-agnostic way to define your event-driven APIs, encompassing features from both MQTT v3.1.1 and v5.0.

MQTT Protocol Overview ​

MQTT is built on a publish-subscribe model, which decouples message producers (publishers) from message consumers (subscribers). The central point of communication is the MQTT broker.

Key features include:

  • Lightweight and Efficient: Designed to minimize network bandwidth and device resource requirements.
  • Publish-Subscribe Model: Decouples clients, enabling scalable and flexible architectures.
  • Quality of Service (QoS): Three levels of message delivery guarantees (0, 1, and 2).
  • Session Awareness: Support for persistent sessions to ensure message delivery to intermittently connected clients.
  • Last Will and Testament (LWT): A crucial feature for device monitoring, allowing clients to be notified of an ungraceful disconnection.
  • Retained Messages: New subscribers to a topic can immediately receive the last known good value.

AsyncAPI MQTT Bindings ​

These bindings allow you to map AsyncAPI concepts to MQTT-specific configurations. They are designed to be general-purpose, covering the most important features across MQTT versions.

Binding Types ​

Binding TypePurposeDescription
Channel BindingTopic DefinitionSpecifies that an AsyncAPI channel maps to an MQTT topic.
Operation BindingPublish/Subscribe BehaviorDefines Quality of Service (QoS) and whether a message is retained.
Message BindingMessage-Level PropertiesConfigures message metadata like correlation data and response topics for request/reply patterns.
Server BindingConnection & Session BehaviorDefines connection parameters like Client ID, Clean Session, Session Expiry, and the Last Will and Testament.

Supported Versions ​

VersionStatusKey Features
0.2.0LatestComprehensive support for features from MQTT v3 and v5, including QoS, retain, LWT, and session management.
0.1.0LegacyBasic MQTT support.

Core MQTT Concepts in AsyncAPI ​

Topics and Channels ​

An AsyncAPI channel directly maps to an MQTT topic. The channel's address is the topic string, which can include parameters to define a topic hierarchy.

yaml
channels:
  smart-home/living-room/{sensorId}/temperature:
    parameters:
      sensorId:
        schema:
          type: string

Quality of Service (QoS) ​

Defined in the operation binding, QoS determines the guarantee of message delivery.

  • qos: 0: At most once.
  • qos: 1: At least once.
  • qos: 2: Exactly once.

Last Will and Testament (LWT) ​

Configured in the server binding, the lastWill object ensures that a predefined message is sent by the broker if a client disconnects unexpectedly. This is vital for monitoring device status.

yaml
servers:
  production:
    bindings:
      mqtt:
        lastWill:
          topic: /devices/status
          qos: 1
          message: '{"deviceId": "thermostat-123", "status": "offline"}'
          retain: true

Persistent Sessions ​

The combination of cleanSession: false (from MQTT v3, called Clean Start in v5) and sessionExpiryInterval (from MQTT v5) in the server binding allows clients to maintain their subscriptions and receive queued messages after a disconnection.

Getting Started ​

A minimal example for a server and a publish operation:

yaml
servers:
  productionBroker:
    url: mqtt://api.example.com
    protocol: mqtt
    bindings:
      mqtt:
        bindingVersion: '0.2.0'
        clientId: 'my-app-123'
        cleanSession: false

operations:
  publishTemperature:
    action: send
    channel:
      $ref: '#/channels/temperature'
    bindings:
      mqtt:
        bindingVersion: '0.2.0'
        qos: 1
        retain: false

When to Use Generic vs. MQTT 5.0 Bindings ​

  • Use these generic MQTT bindings when you need to support a range of MQTT versions or when your requirements are covered by the common features of v3 and v5. They provide the most flexibility.
  • Use the MQTT 5.0 specific bindings only if you need to enforce that an application must use MQTT 5.0 and there are v5-specific properties that are not yet available in the generic binding.

Binding Documentation ​

Channel Bindings ​

Operation Bindings ​

Message Bindings ​

Server Bindings ​