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 将此文件应用于您的集群

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: myevent
  5. namespace: default
  6. spec:
  7. type: bindings.kafka
  8. version: v1
  9. metadata:
  10. - name: topics
  11. value: topic1
  12. - name: brokers
  13. value: localhost:9092
  14. - name: consumerGroup
  15. value: group1

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

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

2. 监听传入事件

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

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

  1. const express = require('express')
  2. const bodyParser = require('body-parser')
  3. const app = express()
  4. app.use(bodyParser.json())
  5. const port = 3000
  6. app.post('/myevent', (req, res) => {
  7. console.log(req.body)
  8. res.status(200).send()
  9. })
  10. app.listen(port, () => console.log(`Kafka consumer app listening on port ${port}!`))

确认事件

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

  1. res.status(200).send()

拒绝事件

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

  1. res.status(500).send()

事件传递保证

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

参考资料