spec-json-schemas
spec-json-schemas copied to clipboard
feat: add amqp binding 0.4.0
Description
In Java Spring applications, it is possible to define an application that connects to an amqp broker, defines exchanges, queues and listens to incoming message on these queues.
My current understanding of amqp:
- A publisher connects to a broker
- The publisher sends a message with a routing key to an exchange
- The broker matches the message's routing key with the routing patterns of the defined exchanges and forwards the message to those queues.
- (Bindings are used to connect an exchange with a queue, which do have a n-to-m mapping)
- The consumer receives message from the queue
In AsyncAPI, the amqp binding supports two types of channels: routingKey (which is an exchange) and queue. Unfortunately, there is no link between the two.
Proposal: Add (optional) fields:
-
name
to specify the actual routing pattern used (in the (topic) exchange or amqp binding) -
channel.$ref
to connect theis=routingKey
channel type to theis=queue
channel type.
I am looking forward to your thoughts. Please let me know, if there are also tests that need to be updated and/or the amqp v0.4.0 needs to be mentioned somewhere to get bundled.
Example:
asyncapi: 3.0.0
info:
title: Springwolf example project - AMQP
version: 1.0.0
description: Springwolf example project to demonstrate springwolfs abilities
defaultContentType: application/json
servers:
amqp-server:
host: amqp:5672
protocol: amqp
channels:
queue-update-id_#_CRUD-topic-exchange-1-id:
address: CRUD-topic-exchange-1
messages:
java.lang.String:
$ref: "#/components/messages/java.lang.String"
bindings:
amqp:
is: routingKey
name: queue-update-id
channel:
$ref: #/components/channels/queue-update_id
exchange:
name: CRUD-topic-exchange-1
type: topic
durable: true
autoDelete: false
vhost: /
bindingVersion: 0.3.0
queue-update_id:
address: queue-update
bindings:
amqp:
is: queue
queue:
name: queue-update
durable: false
exclusive: false
autoDelete: false
vhost: /
bindingVersion: 0.3.0
components:
schemas:
SpringRabbitListenerDefaultHeaders:
type: object
properties: {}
examples:
- {}
java.lang.String:
title: String
type: string
examples:
- '"string"'
messages:
java.lang.String:
headers:
$ref: "#/components/schemas/SpringRabbitListenerDefaultHeaders"
payload:
schemaFormat: application/vnd.aai.asyncapi+json;version=3.0.0
schema:
$ref: "#/components/schemas/java.lang.String"
name: java.lang.String
title: String
bindings:
amqp:
bindingVersion: 0.3.0
operations:
queue-update-id_#_CRUD-topic-exchange-1-id_receive_bindingsUpdate:
action: receive
channel:
$ref: "#/channels/queue-update-id_#_CRUD-topic-exchange-1-id"
bindings:
amqp:
expiration: 0
bindingVersion: 0.3.0
messages:
- $ref: "#/channels/queue-update-id_#_CRUD-topic-exchange-1-id/messages/java.lang.String"
(Original PR: https://github.com/asyncapi/bindings/pull/259)