可插拔组件概述
可插拔组件是指那些不包含在运行时中的组件,与 dapr init
中的内置组件相对。您可以配置 Dapr 使用这些可插拔组件,它们利用构建块 API,但注册方式与内置 Dapr 组件不同。
![](/images/concepts-building-blocks.png)
可插拔组件与内置组件
Dapr 提供了两种注册和创建组件的方法:
- 运行时中包含的内置组件,可以在components-contrib 仓库中找到。
- 独立部署和注册的可插拔组件。
这两种注册选项虽然都利用了 Dapr 的构建块 API,但实现过程不同。
组件详情 | 内置组件 | 可插拔组件 |
---|---|---|
语言 | 只能用 Go 编写 | 可以用任何支持 gRPC 的语言编写 |
运行位置 | 作为 Dapr 运行时可执行文件的一部分 | 作为 pod 中的独立进程或容器运行,与 Dapr 本身分开运行。 |
与 Dapr 的注册方式 | 包含在 Dapr 代码库中 | 通过 Unix 域套接字(使用 gRPC)与 Dapr 注册 |
分发 | 随 Dapr 版本发布。组件的新功能与 Dapr 版本保持一致 | 独立于 Dapr 本身分发。可以在需要时添加新功能,并遵循自己的发布周期。 |
组件激活方式 | Dapr 启动运行组件(自动) | 用户启动组件(手动) |
为什么创建可插拔组件?
在以下场景中,可插拔组件非常有用:
- 您需要一个私有组件。
- 您希望将组件与 Dapr 的发布过程分开。
- 您对 Go 不太熟悉,或者用 Go 实现组件并不理想。
特性
实现可插拔组件
要实现可插拔组件,您需要在组件中实现一个 gRPC 服务。实现 gRPC 服务需要三个步骤:
- 找到 proto 定义文件
- 创建服务脚手架
- 定义服务
了解更多关于如何开发和实现可插拔组件
为组件利用多个构建块
除了从同一组件实现多个 gRPC 服务(例如 StateStore
、QueriableStateStore
、TransactionalStateStore
等),可插拔组件还可以为其他组件接口提供实现。这意味着单个可插拔组件可以同时作为状态存储、pub/sub 和输入或输出绑定工作。换句话说,您可以将多个组件接口实现到一个可插拔组件中,并将其作为 gRPC 服务公开。
虽然在同一个可插拔组件上公开多个组件接口降低了部署多个组件的操作负担,但这使得实现和调试组件变得更加困难。如果不确定,请坚持“关注点分离”,仅在必要时将多个组件接口合并到同一个可插拔组件中。
如何使可插拔组件投入使用
内置组件和可插拔组件有一个共同点:都需要一个组件规范。内置组件不需要任何额外步骤即可使用:Dapr 已准备好自动使用它们。
相反,可插拔组件在与 Dapr 通信之前需要额外的步骤。您需要首先运行组件并促进 Dapr-组件通信以启动注册过程。
下一步
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.