Adding channels

Found an error? Have a suggestion?Edit this page on GitHub

Incorporating channels in the AsyncAPI document facilitates message organization and categorization, streamlining message routing to suitable consumers. It also enables the decoupling of producers and consumers, which contributes to the API's scalability and extensibility. Moreover, it offers comprehensive documentation and transparent communication about the API's communication patterns. Additionally, alternative names for channels can be user-defined to suit specific contexts and preferences.

Here is an example of how to define channels:

1userSignedUp:
2  address: 'user.signedup'
3  messages:
4    userSignedUp:
5      $ref: '#/components/messages/userSignedUp'

The previous AsyncAPI document sets up an interface for a userSignedUp channel, where the address field holds the actual address of the channel (user.signedup).

Channel availability on specific servers

When you add a channel to the AsyncAPI document, by default it is expected to be available on any server described in the document. In other words, if you have two servers, production-kafka-secure and development-kafka, the channel described in the AsyncAPI document must be present on both servers.

It's possible to encounter a scenario where an AsyncAPI document describes an application communicating in a production environment through multiple servers, each utilizing distinct protocols. For example, the application might receive messages from a channel on an MQTT server while concurrently sending messages to a different channel on a Kafka server. In such cases, it's imperative to distinctly specify the exclusive availability of one channel on the MQTT server and another channel solely on the Kafka server.

Here is an example of how you might specify that a channel is available only on specific servers:

1channels:
2  lightTurnOn:
3    address: light.on
4    messages:
5      lightOn:
6        description: An event describing that lights are on
7    servers:
8      - $ref: '#/servers/serverA'
9  lightTurnOnOff:
10    address: light/onoff
11    messages:
12      lightOnOff:
13        description: An event describing that light is either on or off
14    servers:
15      - $ref: '#/servers/serverB'
16servers:
17  serverA:
18    host: serverA.example.com
19    protocol: kafka
20  serverB:
21    host: serverB.example.com
22    protocol: mqtt

The above example shows two different channels available only on selected servers. Notice the servers field under each channel. It means that the lightTurnOn channel is only available on serverA which uses Kafka protocol, and the lightTurnOnOff channel is available only on serverB which uses MQTT protocol.

Was this helpful?
Help us improve the docs by adding your contribution.
OR
Github:AsyncAPICreate Issue on GitHub