ipfans's Blog
Recent content on ipfans's Blog
马上订阅 ipfans's Blog RSS 更新: https://www.4async.com/atom.xml
构建属于你自己的dapr绑定组件

在上一篇文章中,吐槽了拖延症的危害,因此这次我来分享一下我最新推送到dapr的最新的一个新的绑定组件,通过这个来看一下如何实现自己的绑定组件。
文中提到的PR可以在 dapr/components-contrib#872 查看对应的具体代码。
什么是 dapr 的绑定组件?
在dapr中,绑定是用于使用外部系统功能(比如事件或者接口)的扩展组件。它的优势在于:
- 免除连接到消息传递系统(如队列和消息总线)并进行轮询的复杂性;
- 聚焦于业务逻辑,而不是如何与系统交互的实现细节;
- 使代码不受 SDK 或库的跟踪;
- 处理重试和故障恢复;
- 在运行时在绑定之间切换;
- 构建具有特定于环境的绑定的可移植应用程序,不需要进行代码更改;
在官方文档中,也提到了一个具体的例子:以twilio发送短信为例,一般开发过程中应用程序需要依赖Twilio SDK才可以实现功能,但是借助绑定组件,你可以将SDK的绑定转移至dapr程序领域内,在本身应用程序中不再绑定对应的SDK,不用担心未来SDK过期或者变更带来的重复工作(仅需要更新dapr即可)。
根据订阅的进出方向,绑定组件也分为输入绑定和输出绑定。这些绑定均是通过yaml文件描述类型和元数据,通过HTTP/gRPC进行调用。
如何实现自己的绑定组件?
官方例子中提供了一个基础的介绍,上一节中我们也提到了在程序中,根据进出方向可以把绑定组件分为输出绑定和输入绑定。你可以通过官方教程中的例子提供查看:

在这个例子用,你可以看到,根据方向吧dapr发布消息到Kafka作为输出组件,把Kafka读取消息到dapr作为输入组件。
绑定的声明yaml文件的规范则如下:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: <NAME>
namespace: <NAMESPACE>
spec:
type: bindings.<TYPE>
version: v1
metadata:
- name: <NAME>
value: <VALUE>
其中metadata.name则是绑定置名称,spec.metadata.name和spec.metadata.value则是配置的属性和对应值。这个值我们可以通过实现接口InputBinding或者OutputBinding实现输入绑定和输出绑定.
type InputBinding interface {
Init(metadata Metadata) error
Read(handler func(*...剩余内容已隐藏
ipfans's Blog
Recent content on ipfans's Blog
马上订阅 ipfans's Blog RSS 更新: https://www.4async.com/atom.xml
构建属于你自己的dapr绑定组件

在上一篇文章中,吐槽了拖延症的危害,因此这次我来分享一下我最新推送到dapr的最新的一个新的绑定组件,通过这个来看一下如何实现自己的绑定组件。
文中提到的PR可以在 dapr/components-contrib#872 查看对应的具体代码。
什么是 dapr 的绑定组件?
在dapr中,绑定是用于使用外部系统功能(比如事件或者接口)的扩展组件。它的优势在于:
- 免除连接到消息传递系统(如队列和消息总线)并进行轮询的复杂性;
- 聚焦于业务逻辑,而不是如何与系统交互的实现细节;
- 使代码不受 SDK 或库的跟踪;
- 处理重试和故障恢复;
- 在运行时在绑定之间切换;
- 构建具有特定于环境的绑定的可移植应用程序,不需要进行代码更改;
在官方文档中,也提到了一个具体的例子:以twilio发送短信为例,一般开发过程中应用程序需要依赖Twilio SDK才可以实现功能,但是借助绑定组件,你可以将SDK的绑定转移至dapr程序领域内,在本身应用程序中不再绑定对应的SDK,不用担心未来SDK过期或者变更带来的重复工作(仅需要更新dapr即可)。
根据订阅的进出方向,绑定组件也分为输入绑定和输出绑定。这些绑定均是通过yaml文件描述类型和元数据,通过HTTP/gRPC进行调用。
如何实现自己的绑定组件?
官方例子中提供了一个基础的介绍,上一节中我们也提到了在程序中,根据进出方向可以把绑定组件分为输出绑定和输入绑定。你可以通过官方教程中的例子提供查看:

在这个例子用,你可以看到,根据方向吧dapr发布消息到Kafka作为输出组件,把Kafka读取消息到dapr作为输入组件。
绑定的声明yaml文件的规范则如下:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: <NAME>
namespace: <NAMESPACE>
spec:
type: bindings.<TYPE>
version: v1
metadata:
- name: <NAME>
value: <VALUE>
其中metadata.name则是绑定置名称,spec.metadata.name和spec.metadata.value则是配置的属性和对应值。这个值我们可以通过实现接口InputBinding或者OutputBinding实现输入绑定和输出绑定.
type InputBinding interface {
Init(metadata Metadata) error
Read(handler func(*...剩余内容已隐藏