-
-
Notifications
You must be signed in to change notification settings - Fork 74
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: add mqtt v5 specific bindings to mqtt #201
Changes from 4 commits
b69946d
5220394
a785000
737b865
1980587
ba33e3c
b36c4a1
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,11 +2,13 @@ | |
|
||
This document defines how to describe MQTT-specific information on AsyncAPI. | ||
|
||
It applies to all versions of MQTT, although specific binding fields may only apply to particular versions. | ||
|
||
<a name="version"></a> | ||
|
||
## Version | ||
|
||
Current version is `0.1.0`. | ||
Current version is `0.2.0`. | ||
|
||
|
||
<a name="server"></a> | ||
|
@@ -17,21 +19,23 @@ This object contains information about the server representation in MQTT. | |
|
||
##### Fixed Fields | ||
|
||
Field Name | Type | Description | ||
---|:---:|--- | ||
<a name="serverBindingObjectClientId"></a>`clientId` | string | The client identifier. | ||
<a name="serverBindingObjectCleanSession"></a>`cleanSession` | boolean | Whether to create a persistent connection or not. When `false`, the connection will be persistent. | ||
<a name="serverBindingObjectLastWill"></a>`lastWill` | object | Last Will and Testament configuration. | ||
<a name="serverBindingObjectLastWillTopic"></a>`lastWill.topic` | string | The topic where the Last Will and Testament message will be sent. | ||
<a name="serverBindingObjectLastWillQoS"></a>`lastWill.qos` | integer | Defines how hard the broker/client will try to ensure that the Last Will and Testament message is received. Its value MUST be either 0, 1 or 2. | ||
<a name="serverBindingObjectLastWillMessage"></a>`lastWill.message` | string | Last Will message. | ||
<a name="serverBindingObjectLastWillRetain"></a>`lastWill.retain` | boolean | Whether the broker should retain the Last Will and Testament message or not. | ||
<a name="serverBindingObjectKeepAlive"></a>`keepAlive` | integer | Interval in seconds of the longest period of time the broker and the client can endure without sending a message. | ||
<a name="serverBindingObjectBindingVersion"></a>`bindingVersion` | string | The version of this binding. If omitted, "latest" MUST be assumed. | ||
Field Name | Type | MQTT Versions | Description | ||
---|:---:|:---:|---| | ||
<a name="serverBindingObjectClientId"></a>`clientId` | string | 3, 5 | The client identifier. | ||
<a name="serverBindingObjectCleanSession"></a>`cleanSession` | boolean | 3, 5 | Whether to create a persistent connection or not. When `false`, the connection will be persistent. This is called **clean start** in MQTTv5. | ||
<a name="serverBindingObjectLastWill"></a>`lastWill` | object | 3, 5 | Last Will and Testament configuration. `topic`, `qos`, `message` and `retain` are properties of this object as shown below. | ||
<a name="serverBindingObjectLastWillTopic"></a>`lastWill.topic` | string | 3, 5 | The topic where the Last Will and Testament message will be sent. | ||
<a name="serverBindingObjectLastWillQoS"></a>`lastWill.qos` | integer | 3, 5 | Defines how hard the broker/client will try to ensure that the Last Will and Testament message is received. Its value MUST be either 0, 1 or 2. | ||
<a name="serverBindingObjectLastWillMessage"></a>`lastWill.message` | string | 3, 5 | Last Will message. | ||
<a name="serverBindingObjectLastWillRetain"></a>`lastWill.retain` | boolean | 3, 5 | Whether the broker should retain the Last Will and Testament message or not. | ||
<a name="serverBindingObjectKeepAlive"></a>`keepAlive` | integer | 3, 5 | Interval in seconds of the longest period of time the broker and the client can endure without sending a message. | ||
<a name="serverBindingObjectSessionExpiryInterval"></a>`sessionExpiryInterval` | integer \| [Schema Object][schemaObject] \| [Reference Object](referenceObject) | 5 | Interval in seconds or a *Schema Object* containing the definition of the interval. The broker maintains a session for a disconnected client until this interval expires. | ||
<a name="serverBindingObjectMaximumPacketSize"></a>`maximumPacketSize` | integer \| [Schema Object][schemaObject] \| [Reference Object](referenceObject) | 5 | Number of bytes or a *Schema Object* representing the maximum packet size the client is willing to accept. | ||
<a name="serverBindingObjectBindingVersion"></a>`bindingVersion` | string | | The version of this binding. If omitted, "latest" MUST be assumed. | | ||
|
||
This object MUST contain only the properties defined above. | ||
|
||
##### Example | ||
##### Examples | ||
|
||
```yaml | ||
servers: | ||
|
@@ -46,9 +50,24 @@ servers: | |
message: Guest gone offline. | ||
retain: false | ||
keepAlive: 60 | ||
bindingVersion: 0.1.0 | ||
sessionExpiryInterval: 600 | ||
maximumPacketSize: 1200 | ||
bindingVersion: 0.2.0 | ||
``` | ||
```yaml | ||
servers: | ||
production: | ||
bindings: | ||
mqtt: | ||
sessionExpiryInterval: | ||
type: integer | ||
minimum: 30 | ||
maximum: 1200 | ||
maximumPacketSize: | ||
type: integer | ||
minimum: 256 | ||
bindingVersion: 0.2.0 | ||
``` | ||
|
||
|
||
<a name="channel"></a> | ||
|
||
|
@@ -57,7 +76,6 @@ servers: | |
This object MUST NOT contain any properties. Its name is reserved for future use. | ||
|
||
|
||
|
||
<a name="operation"></a> | ||
|
||
## Operation Binding Object | ||
|
@@ -66,15 +84,16 @@ This object contains information about the operation representation in MQTT. | |
|
||
##### Fixed Fields | ||
|
||
Field Name | Type | Applies To | Description | ||
---|:---:|:---:|--- | ||
<a name="operationBindingObjectQoS"></a>`qos` | integer | Publish, Subscribe | Defines the Quality of Service (QoS) levels for the message flow between client and server. Its value MUST be either 0 (At most once delivery), 1 (At least once delivery), or 2 (Exactly once delivery). | ||
<a name="operationBindingObjectRetain"></a>`retain` | boolean | Publish, Subscribe | Whether the broker should retain the message or not. | ||
<a name="operationBindingObjectBindingVersion"></a>`bindingVersion` | string | Publish, Subscribe | The version of this binding. If omitted, "latest" MUST be assumed. | ||
Field Name | Type | Applies To | MQTT Versions | Description | ||
---|:---:|:---:|:---:|--- | ||
<a name="operationBindingObjectQoS"></a>`qos` | integer | Publish, Subscribe | 3, 5 | Defines the Quality of Service (QoS) levels for the message flow between client and server. Its value MUST be either 0 (At most once delivery), 1 (At least once delivery), or 2 (Exactly once delivery). | ||
<a name="operationBindingObjectRetain"></a>`retain` | boolean | Publish | 3, 5 | Whether the broker should retain the message or not. | ||
<a name="operationBindingObjectMessageExpiryInterval"></a>`messageExpiryInterval` | integer \| [Schema Object][schemaObject] \| [Reference Object](referenceObject)| Publish | 5 | Interval in seconds or a *Schema Object* containing the definition of the lifetime of the message. | ||
<a name="operationBindingObjectBindingVersion"></a>`bindingVersion` | string | | | The version of this binding. If omitted, "latest" MUST be assumed. | ||
|
||
This object MUST contain only the properties defined above. | ||
|
||
##### Example | ||
##### Examples | ||
|
||
```yaml | ||
channels: | ||
|
@@ -84,9 +103,30 @@ channels: | |
mqtt: | ||
qos: 2 | ||
retain: true | ||
bindingVersion: 0.1.0 | ||
messageExpiryInterval: 60 | ||
bindingVersion: 0.2.0 | ||
``` | ||
```yaml | ||
channels: | ||
user/signup: | ||
publish: | ||
bindings: | ||
mqtt: | ||
messageExpiryInterval: | ||
type: integer | ||
minimum: 30 | ||
maximum: 300 | ||
bindingVersion: 0.2.0 | ||
``` | ||
```yaml | ||
channels: | ||
user/signup: | ||
subscribe: | ||
bindings: | ||
mqtt: | ||
qos: 2 | ||
bindingVersion: 0.2.0 | ||
``` | ||
|
||
|
||
<a name="message"></a> | ||
|
||
|
@@ -96,18 +136,48 @@ This object contains information about the message representation in MQTT. | |
|
||
##### Fixed Fields | ||
|
||
Field Name | Type | Description | ||
---|:---:|--- | ||
<a name="messageBindingObjectBindingVersion"></a>`bindingVersion` | string | The version of this binding. If omitted, "latest" MUST be assumed. | ||
Field Name | Type | MQTT Versions | Description | ||
---|:---:|:---:|--- | ||
<a name="messageBindingObjectPayloadFormatIndicator"></a>`payloadFormatIndicator` | integer | 5 | Either: **0** (zero): Indicates that the payload is unspecified bytes, or **1**: Indicates that the payload is UTF-8 encoded character data. | | ||
<a name="messageBindingObjectCorrelationData"></a>`correlationData` | [Schema Object][schemaObject] \| [Reference Object](referenceObject) | 5 | Correlation Data is used by the sender of the request message to identify which request the response message is for when it is received. | ||
<a name="messageBindingObjectContentType"></a>`contentType` | string | 5 | String describing the content type of the message payload. This should not conflict with the `contentType` field of the associated AsyncAPI Message object. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. How come the contentType of the AsyncAPI Message object is not enough 🤔 Or rather whats the difference? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The Providing a If we were talking HTTP, it would be the difference between requiring the payload to be JSON and requiring the HTTP headers include There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Got it 👍 |
||
<a name="messageBindingObjectResponseTopic"></a>`responseTopic` | URI string \| [Schema Object][schemaObject] \| [Reference Object](referenceObject) | 5 | The topic (channel URI) for a response message. | ||
<a name="messageBindingObjectBindingVersion"></a>`bindingVersion` | string | | The version of this binding. If omitted, "latest" MUST be assumed. | ||
|
||
This object MUST contain only the properties defined above. | ||
|
||
##### Examples | ||
|
||
```yaml | ||
channels: | ||
user/signup: | ||
subscribe: | ||
message: | ||
bindings: | ||
mqtt: | ||
contentType: "application/json" | ||
correlationData: | ||
type: string | ||
format: uuid | ||
bindingVersion: 0.2.0 | ||
``` | ||
```yaml | ||
channels: | ||
user/signup: | ||
publish: | ||
message: | ||
bindings: | ||
mqtt: | ||
bindingVersion: 0.1.0 | ||
payloadFormatIndicator: 1 | ||
contentType: "application/json" | ||
correlationData: | ||
type: string | ||
format: uuid | ||
responseTopic: | ||
type: string | ||
pattern: "response/client/([a-z1-9]+)" | ||
bindingVersion: 0.2.0 | ||
``` | ||
|
||
[schemaObject]: https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#schemaObject | ||
[referenceObject]: https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#referenceObject |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How is this different from the correlation ID? 🤔
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is the same as a correlation ID.
correlationData
is the MQTT term. When this binding property is provided in the spec, it signals that the correlation ID should be provided in the MQTTv5 PUBLISH property designated for such.I'd love to update the correlation ID runtime expression to indicate that a protocol binding field should be used for the correlation ID.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Alright 👍