This document defines how to describe Anypoint MQ-specific information in AsyncAPI documents.
Anypoint MQ is MuleSoft's multi-tenant, cloud messaging service and is fully integrated with Anypoint Platform.
The version of this bindings specification is 0.1.0
.
This is also the bindingVersion
for all binding objects defined by this specification.
In any given binding object, latest
MAY alternatively be used to refer to the currently latest published version of this bindings specification.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this bindings specification are to be interpreted as described in IETF RFC2119.
These bindings use the anypointmq
protocol in AsyncAPI documents to denote connections to and interactions with Anypoint MQ message brokers.
The Anypoint MQ protocol is based on invocations of the Anypoint MQ Broker REST API.
The fields of the standard Server Object are constrained and interpreted as follows:
Note that the choice of a particular Anypoint MQ client app (via its client ID and secret) decides the Anypoint Platform organization ID and environment (ID) to be those in which this client app is defined. See the Anypoint MQ documentation for details on how to configure Anypoint MQ client apps.
This object MUST NOT contain any properties. Its name is reserved for future use.
The Anypoint MQ Channel Binding Object is defined by a JSON Schema, which defines these fields:
Note that an Anypoint MQ exchange can only be sent to, not received from. To receive messages sent to an exchange, an intermediary queue must be defined and bound to the exchange. In this bindings specification, these intermediary queues are not exposed in the AsyncAPI document. Instead, it is simply assumed that whenever messages must be received from an exchange, such an intermediary queue is involved yet invisible in the AsyncAPI document.
The following example shows two channels where does not apply any bindings and the second one applying anyointmq
bindings.
channels:
userSignup:
address: 'user/signup'
description: |
This application receives command messages from this channel about users to sign up.
Minimal configuration, omitting a channel binding object.
messages:
#...
userSignup:
address: 'user/signup'
description: |
This application sends events to this channel about users that have signed up.
Explicitly provides a channel binding object.
messages:
#...
bindings:
anypointmq:
destination: user-signup-exchg
destinationType: exchange
bindingVersion: '0.1.0'
This object MUST NOT contain any properties. Its name is reserved for future use.
The Anypoint MQ Message Binding Object defines these fields:
Field Name | Type | Description |
---|---|---|
headers |
Schema Object | Reference Object | OPTIONAL. A Schema object containing the definitions for Anypoint MQ-specific headers (so-called protocol headers). This schema MUST be of type object and have a properties key. Examples of Anypoint MQ protocol headers are messageId and messageGroupId . |
bindingVersion |
string | OPTIONAL, defaults to latest . The version of this binding. |
Note that application headers must be specified in the headers
field of the standard Message Object and are transmitted in the properties
section of the Anypoint MQ message.
In contrast, protocol headers such as messageId
must be specified in the headers
field of the message binding object and are transmitted in the headers
section of the Anypoint MQ message.
The following example shows a channels
object with two channels, each having one operation (subscribe
or publish
) with one message. Only the message of the subscribe
operation has a message binding object for anypointmq
:
channels:
userSignup:
address: 'user/signup'
messages:
#...
userSignup:
address: 'user/signup'
messages:
userSignupMessage:
headers:
type: object
properties:
correlationId:
description: Correlation ID set by application
type: string
payload:
type: object
properties:
#...
correlationId:
description: Correlation ID is specified as a header and transmitted in the Anypoint MQ message properties section
location: $message.header#/correlationId
bindings:
anypointmq:
headers:
type: object
properties:
messageId:
type: string
bindingVersion: '0.1.0'
The following is a complete, simple AsyncAPI document illustrating the usage of all binding objects defined in this bindings specification, with all their fields.
asyncapi: 3.0.0
info:
title: Example with Anypoint MQ
version: 0.0.1
servers:
development:
host: mq-us-east-1.anypoint.mulesoft.com
pathname: /api
protocol: anypointmq
protocolVersion: v1
description: >
Anypoint MQ broker for development, in the US East (N. Virginia) runtime
plane
under management of the US control plane.
security:
- $ref: '#/components/securitySchemes/oauthDev'
production:
host: mq-eu-central-1.eu1.anypoint.mulesoft.com
pathname: /api
protocol: anypointmq
protocolVersion: v1
description: >
Anypoint MQ broker for production, in the EU Central (Frankfurt) runtime
plane
under management of the EU control plane.
security:
- $ref: '#/components/securitySchemes/oauthProd'
bindings:
anypointmq:
bindingVersion: 0.1.0
channels:
user/signup:
address: user/signup
messages:
signUpUser.message:
contentType: application/json
headers:
type: object
properties:
correlationId:
description: Correlation ID set by application
type: string
payload:
type: object
properties:
username:
type: string
minLength: 3
correlationId:
description: >-
Correlation ID is specified as a header and transmitted in the
Anypoint MQ message properties section
location: $message.header#/correlationId
bindings:
anypointmq:
headers:
type: object
properties:
messageId:
type: string
bindingVersion: 0.1.0
description: >
This application receives command messages from this channel about users
to sign up.
bindings:
anypointmq:
destination: user-signup-queue
destinationType: fifo-queue
bindingVersion: 0.1.0
operations:
signUpUser:
action: receive
channel:
$ref: '#/channels/user~1signup'
description: >
This application receives command messages via this operation about users
to sign up.
messages:
- $ref: '#/channels/user~1signup/messages/signUpUser.message'
components:
securitySchemes:
oauthDev:
type: oauth2
flows:
clientCredentials:
tokenUrl: 'https://mq-us-east-1.anypoint.mulesoft.com/api/v1/authorize'
scopes: {}
oauthProd:
type: oauth2
flows:
clientCredentials:
tokenUrl: 'https://mq-eu-central-1.eu1.anypoint.mulesoft.com/api/v1/authorize'
scopes: {}