docs

Dapr用户文档

View project on GitHub

Bindings

Dapr provides bi-directional binding capabilities for applications and a consistent approach to interacting with different cloud/on-premise services or systems. Developers can invoke output bindings using the Dapr API, and have the Dapr runtime trigger an application with input bindings.

Examples for bindings include Kafka, Rabbit MQ, Azure Event Hubs, AWS SQS, GCP Storage to name a few.

An Dapr Binding has the following structure:

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: <NAME>
spec:
  type: bindings.<TYPE>
  metadata:
  - name: <NAME>
    value: <VALUE>

The metadata.name is the name of the binding. A developer who wants to trigger her app using an input binding can listen on a POST http endpoint with the route name being the same as metadata.name.

the metadata section is an open key/value metadata pair that allows a binding to define connection properties, as well as custom properties unique to the implementation.

For example, here’s how a Python application subscribes for events from Kafka using an Dapr API compliant platform:

Kafka Component

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: kafkaevent
spec:
  type: bindings.kafka
  metadata:
  - name: brokers
    value: "http://localhost:5050"
  - name: topics
    value: "someTopic"
  - name: publishTopic
    value: "someTopic2"
  - name: consumerGroup
    value: "group1"

Python Code

from flask import Flask
app = Flask(__name__)

@app.route("/kafkaevent", methods=['POST'])
def incoming():
    print("Hello from Kafka!", flush=True)

    return "Kafka Event Processed!"

Sending messages to output bindings

This endpoint lets you invoke an Dapr output binding.

HTTP Request

POST/GET/PUT/DELETE http://localhost:3500/v1.0/bindings/<name>

HTTP Response codes

Code Description
200 Request successful
500 Request failed

Payload

The bindings endpoint receives the following JSON payload:

{
  "data": "",
  "metadata": [
    "": ""
  ]
}

The data field takes any JSON serializable value and acts as the payload to be sent to the output binding. The metadata is an array of key/value pairs and allows to set binding specific metadata for each call.

URL Parameters

Parameter Description
name the name of the binding to invoke
curl -X POST http://localhost:3500/v1.0/bindings/myKafka \
	-H "Content-Type: application/json" \
	-d '{
        "data": {
          "message": "Hi"
        },
        "metadata": [
          "key": "redis-key-1"
        ]
      }'