The documentation you are viewing is for Dapr v1.7 which is an older version of Dapr. For up-to-date documentation, see the latest version.

How-To: 使用输入绑定来触发应用程序

使用 Dapr 输入绑定来触发由事件驱动的程序

使用绑定,代码可以被来自不同资源的传入事件触发,这些事件可以是任何内容:队列、消息传递管道、云服务、文件系统等。

这对于事件驱动的处理,数据管道或只是对事件作出反应并进一步处理都很理想。

Dapr 绑定允许您 :

  • 接收不包含特定 SDK 或库的事件
  • 在不更改代码的情况下替换绑定
  • 关注业务逻辑而不是事件资源实现

For more info on bindings, read this overview.

有关展示绑定的快速入门示例,请访问此 链接

1. 1. 创建绑定

输入绑定表示 Dapr 用于读取事件并推送到应用程序的事件资源。

就本指南的目的,我们会使用 Kafka 绑定。 You can find a list of the different binding specs here.

创建以下 YAML 文件,名为 binding.yaml,并将其保存到应用程序的 components 子文件夹中。 (使用具有 --components-path 标记 的 dapr run 命令来指向自定义组件目录)

注: 在 Kubernetes 中运行时,使用 kubectl apply -f binding.yaml 将此文件应用于您的集群

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

在这里,创建一个新的名称为 myevent 的绑定组件。

metadata 部分中,配置 Kafka 相关属性,如要监听的topics,代理或者更多。

2. 监听传入事件

现在配置您的应用程序来接收传入事件。 如果使用 HTTP ,那么需要监听在文件 metadata.name 中指定的绑定名称所对应的POST 终结点。 在此示例中,是 myevent

以下示例演示了在 Node.js 中您该如何监听事件,但这适用于任何编程语言

const express = require('express')
const bodyParser = require('body-parser')
const app = express()
app.use(bodyParser.json())

const port = 3000

app.post('/myevent', (req, res) => {
    console.log(req.body)
    res.status(200).send()
})

app.listen(port, () => console.log(`Kafka consumer app listening on port ${port}!`))

确认事件

为了告诉 Dapr 您成功处理了应用程序中的事件,请从 http 处理程序 返回 200 OK 响应。

res.status(200).send()

拒绝事件

为了告知 Dapr 事件未在应用程序中正确处理事件并将其调度为重新交付,请返回与 200 OK 不同的响应。 例如, 500 Error

res.status(500).send()

事件传递保证

事件传递保证由绑定实现控制。 根据绑定实现,事件传递可以正好一次或至少一次。

参考资料