高级选项

虽然大多数人通常不需要这些指南,但这些指南展示了配置 Go 可插拔组件的高级方法。

组件生命周期

可插拔组件通过传递一个”工厂方法”进行注册,该方法将在与该套接字关联的每个配置的 Dapr 组件的每个类型中调用。 该方法返回与该 Dapr 组件关联的实例(无论是共享的还是非共享的)。 这样可以允许将同一类型的多个Dapr组件配置为具有不同的元数据集,当组件操作需要彼此隔离时等。

注册多个服务

每次调用Register()都会将套接字绑定到一个已注册的可插拔组件。 每个套接字可以注册每种组件类型(输入/输出绑定、发布/订阅和状态存储)的一个实例。

  1. func main() {
  2. dapr.Register("service-a", dapr.WithStateStore(func() state.Store {
  3. return &components.MyDatabaseStoreComponent{}
  4. }))
  5. dapr.Register("service-a", dapr.WithOutputBinding(func() bindings.OutputBinding {
  6. return &components.MyDatabaseOutputBindingComponent{}
  7. }))
  8. dapr.Register("service-b", dapr.WithStateStore(func() state.Store {
  9. return &components.MyDatabaseStoreComponent{}
  10. }))
  11. dapr.MustRun()
  12. }

在上面的示例中,一个状态存储和输出绑定被注册到套接字service-a,而另一个状态存储被注册到套接字service-b

配置多个组件

配置 Dapr 使用托管组件与任何单个组件的配置方式相同 - 组件的 YAML 引用关联的套接字。 例如,要为上面注册的两个组件(service-aservice-b)配置 Dapr 状态存储,您需要创建两个配置文件,分别引用它们各自的 socket。

  1. #
  2. # This component uses the state store associated with socket `service-a`
  3. #
  4. apiVersion: dapr.io/v1alpha1
  5. kind: Component
  6. metadata:
  7. name: state-store-a
  8. spec:
  9. type: state.service-a
  10. version: v1
  11. metadata: []
  1. #
  2. # This component uses the state store associated with socket `service-b`
  3. #
  4. apiVersion: dapr.io/v1alpha1
  5. kind: Component
  6. metadata:
  7. name: state-store-b
  8. spec:
  9. type: state.service-b
  10. version: v1
  11. metadata: []

下一步