Skip to content
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

docs: provide reply definition #992

Open
wants to merge 55 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 42 commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
78e210a
feat: strip custom referencing mechanism from Channel Item (#777)
char0n Jul 5, 2022
3c59fa6
docs: clarify the meaning of components (#803)
fmvilas Jul 25, 2022
624ad52
feat: add new channels object (#827)
fmvilas Sep 21, 2022
eef1d04
Merge branch 'master' into next-major-spec
derberg Sep 26, 2022
1d50ccb
feat!: move operations to its own root object (#806)
fmvilas Sep 26, 2022
05d5d7a
Merge master into next-major-spec
asyncapi-bot-eve Sep 28, 2022
c830851
Merge master into next-major-spec
asyncapi-bot-eve Sep 29, 2022
6e72900
Merge master into next-major-spec
asyncapi-bot-eve Oct 10, 2022
a1783a2
feat: add more reusable objects to the components object (#792)
magicmatatjahu Oct 11, 2022
a828246
Merge master into next-major-spec
asyncapi-bot-eve Oct 25, 2022
f48d383
Merge master into next-major-spec
asyncapi-bot-eve Oct 25, 2022
0cd222a
Merge master into next-major-spec
asyncapi-bot-eve Oct 25, 2022
f3a8468
feat: move root tags and externalDocs to the info object (#794)
magicmatatjahu Oct 26, 2022
8d66f08
Merge master into next-major-spec
asyncapi-bot-eve Oct 27, 2022
0e77319
Merge master into next-major-spec
asyncapi-bot-eve Oct 27, 2022
f3773c5
chore: fix inconsistent title level (#865)
jonaslagoni Oct 31, 2022
623fbc8
fix: remove action and channel fields from Operation Trait Object (#860)
magicmatatjahu Nov 9, 2022
33a9971
chore: update AsyncAPI version to 3.0.0 (#864)
jonaslagoni Nov 21, 2022
c46448f
feat: add missed "metadata" fields in the Server/Channel/Operation Ob…
magicmatatjahu Dec 19, 2022
36061cd
feat: unify all referencing mechanisms (#852)
fmvilas Jan 17, 2023
df2bab7
chore: clarify introduction (#875)
fmvilas Jan 22, 2023
190aced
fix: use union for operation action (#905)
magicmatatjahu Feb 7, 2023
a2fdc03
feat: replace server url with server host and pathname (#888)
fmvilas Feb 13, 2023
d367c23
feat: request/response support (#847)
GreenRover Mar 10, 2023
385d651
docs: fixes Operation Object link pointing to Channel Object doc (#929)
nickshoe Apr 26, 2023
242c0f6
docs: remove info about compatibility with openapi (#933)
derberg May 23, 2023
1987e69
feat: simplify parameter object (#935)
fmvilas May 29, 2023
3c61f49
feat: allow defining schema format other than default (#910)
GreenRover May 30, 2023
83035ab
chore: fix multiformat schema object table (#943)
jonaslagoni Jun 13, 2023
d89a1a6
docs: align text about send receive and publisher and subscriber (#934)
derberg Jun 29, 2023
e26b9a5
feat: new traits merge mechanism (#907)
magicmatatjahu Jul 13, 2023
f812cd7
docs: add info that runtime expression is used by reply obj (#955)
derberg Jul 20, 2023
6ce7d35
ci: update release workflow on release branch (#956)
kaushik-rishi Jul 26, 2023
e2a3fa4
fix: clarify expected type for Message headers (#952)
smoya Jul 28, 2023
c37d745
chore: update examples to v3 (#947)
jonaslagoni Aug 2, 2023
05e7b71
fix: trigger release with fixed release workflow (#968)
derberg Sep 12, 2023
abfae49
fix: update some examples according to v3 (#971)
smoya Sep 17, 2023
cc109fe
docs: update examples to be written by human not converter (#977)
derberg Oct 30, 2023
768ac3f
feat!: remove messageId from Message and MessageTraits objects (#984)
fmvilas Nov 6, 2023
e7e66db
fix: remove mentions of Operation Item Object (#988)
char0n Nov 13, 2023
e76206a
docs: add constraint about channel address to not use query params an…
derberg Nov 13, 2023
5e3044a
docs provide definition for the reply
Tenischev Nov 16, 2023
f8a6bb0
chore: fix gitter binding example (#995)
Amzani Nov 28, 2023
5fb88a0
fix: clarify pointers for channel.servers and operation.channel field…
smoya Nov 29, 2023
1a8c669
chore: update examples so messages reference channel messages (#997)
derberg Nov 29, 2023
2e45aad
chore: merge upstream 'master' into 'next-major-spec'
jonaslagoni Dec 4, 2023
ba8ea9d
chore: apply #853
jonaslagoni Dec 4, 2023
297b336
chore: apply #884
jonaslagoni Dec 4, 2023
3cb5550
chore: apply #902
jonaslagoni Dec 4, 2023
736b5e1
chore: apply #909
jonaslagoni Dec 4, 2023
41686ae
chore: apply #983
jonaslagoni Dec 4, 2023
1a6958b
Merge pull request #999 from jonaslagoni/update_with_master_3
derberg Dec 4, 2023
4c52386
Merge remote-tracking branch 'origin/next-major-spec' into provide_re…
Tenischev Dec 13, 2023
4730960
Merge remote-tracking branch 'origin/master' into provide_reply_defin…
Tenischev Jan 10, 2024
2c72596
Merge remote-tracking branch 'remote/master' into provide_reply_defin…
Tenischev Jan 10, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,18 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v1
uses: actions/setup-node@v3
with:
node-version: 18
- name: Add plugin for conventional commits
run: npm install conventional-changelog-conventionalcommits
run: npm install --save-dev conventional-changelog-conventionalcommits@6.1.0
- name: Release to GitHub
env:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
GIT_AUTHOR_NAME: asyncapi-bot
GIT_AUTHOR_EMAIL: [email protected]
GIT_COMMITTER_NAME: asyncapi-bot
GIT_COMMITTER_EMAIL: [email protected]
run: npx semantic-release@17.4.3
run: npx semantic-release@21.0.7
12 changes: 11 additions & 1 deletion examples/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,14 @@

In this directory, you can find some examples of AsyncAPI documents.

**Do you have an example that could be valuable?** Open a pull request to contribute it.
**Do you have an example that could be valuable?** Open a pull request to contribute it.

## File naming

You may notice `asyncapi` in the the name of each example. We recommend doing the same with your AsyncAPI document. This way you enable features like documentation display on node hover, auto completion and validation of your AsyncAPI documents in IDEs like VSCode or IntelliJ IDEA. IDEs integrate with [SchemaStore](https://www.schemastore.org/json/) where AsyncAPI specification JSON Schema files are referenced. Some IDEs do it by default, some, like VSCode require you to install additional extensions, like `YAML` extension.

## Editors

To edit your AsyncAPI documents, you can use [AsyncAPI Studio](https://studio.asyncapi.com/).

If you prefer to use your favourite IDE, there are official extensions for [VSCode](https://marketplace.visualstudio.com/items?itemName=asyncapi.asyncapi-preview) and [IntelliJ IDEA](https://plugins.jetbrains.com/plugin/15673-asyncapi)
333 changes: 333 additions & 0 deletions examples/adeo-kafka-request-reply-asyncapi.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,333 @@
asyncapi: 3.0.0
info:
title: Adeo AsyncAPI Case Study
version: "%REPLACED_BY_MAVEN%"
description: >
This Adeo specification illustrates how ADEO uses AsyncAPI to document some of their exchanges
contact:
name: AsyncAPI team
email: [email protected]
tags:
- name: costing
description: "Costing channels, used by Costing clients."
servers:
production:
host: "prod.url:9092"
protocol: kafka-secure
description: Kafka PRODUCTION cluster
security:
- $ref: '#/components/securitySchemes/sasl-ssl'
bindings:
kafka:
schemaRegistryUrl: >-
https://schema-registry.prod.url/
staging:
host: "staging.url:9092"
protocol: kafka-secure
description: Kafka STAGING cluster for `uat` and `preprod` environments
security:
- $ref: '#/components/securitySchemes/sasl-ssl'
bindings:
kafka:
schemaRegistryUrl: >-
https://schema-registry.staging.url/
dev:
host: "dev.url:9092"
protocol: kafka-secure
description: Kafka DEV cluster for `dev` and `sit` environments
security:
- $ref: '#/components/securitySchemes/sasl-ssl'
bindings:
kafka:
schemaRegistryUrl: >-
https://schema-registry.dev.url/

channels:
costingRequest:
address: "adeo-{env}-case-study-COSTING-REQUEST-{version}"
description: >
Use this topic to do a Costing Request to Costing product.
We use the
[**RecordNameStrategy**](https://docs.confluent.io/platform/current/schema-registry/serdes-develop/index.html#subject-name-strategy)
to infer the messages schema.
You have to define `x-value.subject.name.strategy` to
`io.confluent.kafka.serializers.subject.RecordNameStrategy` in your
producer to use the schema we manage.
The schema below illustrates how Costing Request messages are
handled.
![](https://user-images.githubusercontent.com/5501911/188920831-689cec5f-8dc3-460b-8794-0b54ec8b0ac8.png)
parameters:
env:
$ref: "#/components/parameters/Env"
version:
$ref: "#/components/parameters/Version"
bindings:
kafka:
replicas: 3
partitions: 3
topicConfiguration:
cleanup.policy: [ "delete" ]
retention.ms: 604800000
messages:
costingRequest:
$ref: "#/components/messages/costingRequestV1"





costingResponse:
address: "adeo-{env}-case-study-COSTING-RESPONSE-{version}"
description: >
This topic is used to REPLY Costing Requests and is targeted by the
`REPLY_TOPIC` header.
**You must grant PUBLISH access to our `svc-ccr-app` service account.**.
We use the
[**RecordNameStrategy**](https://docs.confluent.io/platform/current/schema-registry/serdes-develop/index.html#subject-name-strategy)
to infer the messages schema.
You have to define `key.subject.name.strategy` and
`x-value.subject.name.strategy` to
`io.confluent.kafka.serializers.subject.RecordNameStrategy` in your
consumer.
The schema below illustrates how Costing Response messages are
handled.
![](https://user-images.githubusercontent.com/5501911/188920831-689cec5f-8dc3-460b-8794-0b54ec8b0ac8.png)
parameters:
env:
$ref: "#/components/parameters/Env"
version:
$ref: "#/components/parameters/Version"
bindings:
kafka:
x-key.subject.name.strategy:
type: string
description: >
We use the RecordNameStrategy to infer the messages schema.
Use
`x-key.subject.name.strategy=io.confluent.kafka.serializers.subject.RecordNameStrategy`
in your consumer configuration.
x-value.subject.name.strategy:
type: string
description: >
We use the RecordNameStrategy to infer the messages schema.
Use
`x-value.subject.name.strategy=io.confluent.kafka.serializers.subject.RecordNameStrategy`
in your consumer configuration.
messages:
costingResponse:
$ref: "#/components/messages/costingResponse"




operations:
requestCosting:
action: receive
channel:
$ref: '#/channels/costingRequest'
reply:
channel:
$ref: '#/channels/costingResponse'
address:
location: '$message.header#/REPLY_TOPIC'
summary: |
[COSTING] Request one or more Costing calculation for any product
description: >
You can try a costing request using our [Conduktor producer
template](https://conduktor.url)
tags:
- name: costing
bindings:
kafka:
groupId:
type: string
description: >
The groupId must be prefixed by your `svc` account, deliver by the
Adeo Kafka team.
This `svc` must have the write access to the topic.
x-value.subject.name.strategy:
type: string
description: >
We use the RecordNameStrategy to infer the messages schema.
Use
`x-value.subject.name.strategy=io.confluent.kafka.serializers.subject.RecordNameStrategy`
in your producer configuration.
getCostingResponse:
action: send
channel:
$ref: '#/channels/costingResponse'
summary: >
[COSTING] Get the costing responses matching an initial Costing
Request.
bindings:
kafka:
groupId:
type: string
description: >
The groupId must be prefixed by your `svc` account, deliver by the
Adeo Kafka team.
This `svc` must have the read access to the topic.
tags:
- name: costing





components:
correlationIds:
costingCorrelationId:
description: >
This correlation ID is used for message tracing and messages
correlation.
This correlation ID is generated at runtime based on the `REQUEST_ID`
and sent to the RESPONSE message.
location: $message.header#/REQUEST_ID
messages:
costingRequestV1:
name: CostingRequestV1
title: Costing Request V1
summary: Costing Request V1 inputs.
tags:
- name: costing
correlationId:
$ref: "#/components/correlationIds/costingCorrelationId"
headers:
type: object
required:
- REQUESTER_ID
- REQUESTER_CODE
- REQUEST_ID
- REPLY_TOPIC
properties:
REQUEST_ID:
$ref: "#/components/schemas/RequestId"
REPLY_TOPIC:
$ref: "#/components/schemas/ReplyTopic"
REQUESTER_ID:
$ref: "#/components/schemas/RequesterId"
REQUESTER_CODE:
$ref: "#/components/schemas/RequesterCode"
payload:
schemaFormat: application/vnd.apache.avro;version=1.9.0
schema:
$ref: "https://www.asyncapi.com/resources/casestudies/adeo/CostingRequestPayload.avsc"
costingResponse:
name: CostingResponse
title: Costing Response
summary: Costing Response ouputs.
tags:
- name: costing
description: >
Please refer to the `CostingResponseKey.avsc` schema, available on [our
github
project](https://github.url/).
correlationId:
$ref: "#/components/correlationIds/costingCorrelationId"
headers:
type: object
properties:
CALCULATION_ID:
$ref: "#/components/schemas/MessageId"
CORRELATION_ID:
$ref: "#/components/schemas/CorrelationId"
REQUEST_TIMESTAMP:
type: string
format: date-time
description: Timestamp of the costing request
CALCULATION_TIMESTAMP:
type: string
format: date-time
description: Technical timestamp for the costing calculation
bindings:
kafka:
key:
$ref: "https://deploy-preview-921--asyncapi-website.netlify.app/resources/casestudies/adeo/CostingResponseKey.avsc"
payload:
schemaFormat: application/vnd.apache.avro;version=1.9.0
schema:
$ref: "https://deploy-preview-921--asyncapi-website.netlify.app/resources/casestudies/adeo/CostingResponsePayload.avsc"
schemas:
RequesterId:
type: string
description: The Costing requester service account used to produce costing request.
example: svc-ecollect-app
RequesterCode:
type: string
description: >-
The Costing requester code (generally the BU Code). The requester code
is useful to get the dedicated context (tenant).
example: 1
MessageId:
type: string
format: uuid
description: A unique Message ID.
example: 1fa6ef40-8f47-40a8-8cf6-f8607d0066ef
RequestId:
type: string
format: uuid
description: >-
A unique Request ID needed to define a `CORRELATION_ID` for exchanges,
which will be sent back in the Costing Responses.
example: 1fa6ef40-8f47-40a8-8cf6-f8607d0066ef
CorrelationId:
type: string
format: uuid
description: >-
A unique Correlation ID defined from the `REQUEST_ID` or the
`MESSAGE_ID` provided in the Costing Request.
example: 1fa6ef40-8f47-40a8-8cf6-f8607d0066ef
BuCode:
type: string
description: The Business Unit code for which data are applicable.
example: 1
ReplyTopic:
type: string
description: >
The Kafka topic where to send the Costing Response. This is required for
the [Return Address EIP
pattern](https://www.enterpriseintegrationpatterns.com/patterns/messaging/ReturnAddress.html).
**You must grant WRITE access to our `svc-ccr-app` service account.**
example: adeo-case-study-COSTING-RESPONSE-V1
ErrorStep:
type: string
description: |
The woker that has thrown the error.
example: EXPOSE_RESULT
ErrorMessage:
type: string
description: |
The error message describing the error.
example: Error message
ErrorCode:
type: string
description: |
The error code.
example: CURRENCY_NOT_FOUND
parameters:
Env:
description: Adeo Kafka Environement for messages publications.
enum:
- dev
- sit
- uat1
- preprod
- prod
Version:
description: the topic version you want to use
examples:
- V1
default: V1
securitySchemes:
sasl-ssl:
type: plain
x-sasl.jaas.config: >-
org.apache.kafka.common.security.plain.PlainLoginModule required
username="<CLUSTER_API_KEY>" password="<CLUSTER_API_SECRET>";
x-security.protocol: SASL_SSL
x-ssl.endpoint.identification.algorithm: https
x-sasl.mechanism: PLAIN
description: >
Use [SASL authentication with SSL
encryption](https://docs.confluent.io/platform/current/security/security_tutorial.html#configure-clients)
to connect to the ADEO Broker.
Loading
Loading