NATS¶
NATS event-source listens to NATS subject notifications and helps sensor trigger the workloads.
Event Structure¶
The structure of an event dispatched by the event-source over the eventbus looks like following,
{
"context": {
"type": "type_of_event_source",
"specversion": "cloud_events_version",
"source": "name_of_the_event_source",
"id": "unique_event_id",
"time": "event_time",
"datacontenttype": "type_of_data",
"subject": "name_of_the_configuration_within_event_source"
},
"data": {
"subject": "name_of_the_nats_subject",
"headers": "headers_of_the_nats_message",
"body": "message_payload"
}
}
Specification¶
NATS event-source specification is available here.
Setup¶
- Make sure to have NATS cluster deployed in the Kubernetes. If you don't have one already installed, please refer https://github.com/nats-io/nats-operator for details.
NATS cluster setup for test purposes,
apiVersion: v1
kind: Service
metadata:
name: nats
namespace: argo-events
labels:
component: nats
spec:
selector:
component: nats
type: ClusterIP
ports:
- name: client
port: 4222
- name: cluster
port: 6222
- name: monitor
port: 8222
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: nats
namespace: argo-events
labels:
component: nats
spec:
serviceName: nats
replicas: 1
template:
metadata:
labels:
component: nats
spec:
containers:
- name: nats
image: nats:latest
ports:
- containerPort: 4222
name: client
- containerPort: 6222
name: cluster
- containerPort: 8222
name: monitor
livenessProbe:
httpGet:
path: /
port: 8222
initialDelaySeconds: 10
timeoutSeconds: 5
-
Create the event source by running the following command.
kubectl apply -n argo-events -f https://raw.githubusercontent.com/argoproj/argo-events/stable/examples/event-sources/nats.yaml
-
Create the sensor by running the following command.
kubectl apply -n argo-events -f https://raw.githubusercontent.com/argoproj/argo-events/stable/examples/sensors/nats.yaml
-
If you are running NATS on local K8s cluster, make sure to
port-forward
to pod,kubectl -n argo-events port-forward <nats-pod-name> 4222:4222
-
Publish a message for the subject specified in the event source. Refer the nats example to publish a message to the subject https://github.com/nats-io/go-nats-examples/tree/master/patterns/publish-subscribe.
go run main.go -s localhost foo '{"message": "hello"}'
-
Once a message is published, an argo workflow will be triggered. Run
argo list
to find the workflow.
Troubleshoot¶
Please read the FAQ.