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()
事件传递保证
事件传递保证由绑定实现控制。 根据绑定实现,事件传递可以正好一次或至少一次。