ipfans's Blog

Recent content on ipfans's Blog

马上订阅 ipfans's Blog RSS 更新: https://www.4async.com/atom.xml

构建属于你自己的dapr绑定组件

2021年5月16日 02:38
Featured image of post 构建属于你自己的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.namespec.metadata.value则是配置的属性和对应值。这个值我们可以通过实现接口InputBinding或者OutputBinding实现输入绑定和输出绑定.

type InputBinding interface {
 Init(metadata Metadata) error
 Read(handler func(*...

剩余内容已隐藏

查看完整文章以阅读更多