可插拔组件概述
可插拔组件的解剖结构和支持的组件类型概述
可插拔组件是指不包含在运行时中的组件,与 dapr init 附带内置组件不同。您可以配置 Dapr 使用可插拔组件,这些组件利用构建块 API,但注册方式与内置 Dapr 组件不同。

可插拔组件与内置组件
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 等)外,可插拔组件还可以暴露其他组件接口的实现。这意味着单个可插拔组件可以同时充当状态存储、发布订阅和输入或输出绑定。换句话说,您可以将多个组件接口实现到一个可插拔组件中,并将其暴露为 gRPC 服务。
虽然在同一可插拔组件上暴露多个组件接口可以降低部署多个组件的运维负担,但它会使组件的实现和调试变得更加困难。如有疑问,请遵循"关注点分离"原则,仅在必要时将多个组件接口合并到同一个可插拔组件中。
将可插拔组件投入运维
内置组件和可插拔组件有一个共同点:两者都需要组件规范 。内置组件无需任何额外步骤即可使用:Dapr 自动准备好使用它们。
相比之下,可插拔组件在与 Dapr 通信之前需要额外步骤。您需要首先运行组件,并促进 Dapr-组件通信以启动注册过程。