How-To: Use output bindings to interface with external resources

Invoke external systems with output bindings

Output bindings enable you to invoke external resources without taking dependencies on special SDK or libraries. For a complete sample showing output bindings, visit this link.

Watch this video on how to use bi-directional output bindings.

1. Create a binding

An output binding represents a resource that Dapr uses to invoke and send messages to.

For the purpose of this guide, you’ll use a Kafka binding. You can find a list of the different binding specs here.

Create a new binding component with the name of myevent.

Inside the metadata section, configure Kafka related properties such as the topic to publish the message to and the broker.


Create the following YAML file, named binding.yaml, and save this to a components sub-folder in your application directory. (Use the --components-path flag with dapr run to point to your custom components dir)

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: myevent
  namespace: default
spec:
  type: bindings.kafka
  version: v1
  metadata:
  - name: brokers
    value: localhost:9092
  - name: publishTopic
    value: topic1

To deploy this into a Kubernetes cluster, fill in the metadata connection details of your desired binding component in the yaml below (in this case kafka), save as binding.yaml, and run kubectl apply -f binding.yaml.

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: myevent
  namespace: default
spec:
  type: bindings.kafka
  version: v1
  metadata:
  - name: brokers
    value: localhost:9092
  - name: publishTopic
    value: topic1

2. Send an event

All that’s left now is to invoke the output bindings endpoint on a running Dapr instance.

You can do so using HTTP:

curl -X POST -H 'Content-Type: application/json' http://localhost:3500/v1.0/bindings/myevent -d '{ "data": { "message": "Hi!" }, "operation": "create" }'

As seen above, you invoked the /binding endpoint with the name of the binding to invoke, in our case its myevent. The payload goes inside the mandatory data field, and can be any JSON serializable value.

You’ll also notice that there’s an operation field that tells the binding what you need it to do. You can check here which operations are supported for every output binding.

References