This template generates a Go module that uses watermill as library for building event-driven applications. The reason to choose watermill is because it provides an abstraction to messaging supporting multiple protocols. This will help this generator support multiple protocols.
The go
code generated by this template has the following structure
go
structs using ModelinaTo have correctly generated code, your AsyncAPI file MUST define operationId for every operation.
Example:
channels:
light/measured:
subscribe:
operationId: LumenPublish
Protocol | Subscriber | Publishers |
---|---|---|
AMQP | Yes | Yes |
This template must be used with the AsyncAPI Generator. You can find all available options here.
This template has been tested to generate an AMQP subscriber for this asyncapi.yaml file
npm install -g @asyncapi/generator
# clone this repository and navigate to this repository
ag test/asyncapi.yaml @asyncapi/go-watermill-template -o /path/to/generated-code -p moduleName=your-go-module-name
Following are the options that can be passed to the generator
The above code currently generates a Go module that has a AMQP subscriber.
To run the generated code the following needs to be installed
go mod download
go mod tidy
rabbitmq
. It is hardcoded as "amqp://guest:guest@localhost:5672/"
at <generated-code>/config/server.go
. Change it as per your rabbitmq instance requirementsgo run main.go
rabbitmq
, navigate to it using http://localhost:15672/
with username and password guest
/ guest
(These are default rabbitmq credentials).
FYI one can start an instance of rabbitmq
using docker
as follow
docker run -d -p 15672:15672 -p 5672:5672 rabbitmq:3-management
cURL
request. Default rabbitmq user is guest
and password is guest
curl --user <rabbit-user>:<rabbit-password> -X PUT \
http://localhost:15672/api/queues/%2f/<queue-name> \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-d '{
"auto_delete":false,
"durable":true
}'
cURL
request. Default rabbitmq user is guest
and password is guest
curl --user <rabbit-user>:<rabbit-password> -X POST \
http://localhost:15672/api/exchanges/%2f/amq.default/publish \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-d ' {
"properties":{},
"routing_key":"light/measured",
"payload":"{\"id\":1,\"lumens\":2,\"sentAt\":\"2021-09-21\"}",
"payload_encoding":"string"
}'
go run main.go
was running and the published message should be printedYou can configure this template by passing different parameters in the Generator CLI: -p PARAM1_NAME=PARAM1_VALUE -p PARAM2_NAME=PARAM2_VALUE
Name | Description | Required | Example |
---|---|---|---|
moduleName | Name for the generated Go module | false | my-app |
If you are interested in contributing to this repo refer to the contributing docs