.NET Dapr 可插拔组件中的多个服务

如何从一个.NET可插拔组件中公开多个服务

一个可插拔的组件可以承载多个不同类型的组件。 你可以这样做:

  • 尽量减少集群中运行的 sidecar 数量
  • 将可能共享库和实现的相关组件分组,例如:
    • 一个同时作为通用状态存储和数据库暴露的
    • 允许进行更具体操作的输出绑定。

每个 Unix 域套接字都可以管理对每种类型的一个组件的调用。 要托管多个相同类型的组件,您可以将这些类型分布在多个套接字上。 SDK 将每个套接字绑定到一个“服务”,每个服务由一个或多个组件类型组成。

注册多个服务

每次调用RegisterService()都会将套接字绑定到一组已注册的组件,每个服务可以注册每种类型的组件中的一个。

  1. var app = DaprPluggableComponentsApplication.Create();
  2. app.RegisterService(
  3. "service-a",
  4. serviceBuilder =>
  5. {
  6. serviceBuilder.RegisterStateStore<MyDatabaseStateStore>();
  7. serviceBuilder.RegisterBinding<MyDatabaseOutputBinding>();
  8. });
  9. app.RegisterService(
  10. "service-b",
  11. serviceBuilder =>
  12. {
  13. serviceBuilder.RegisterStateStore<AnotherStateStore>();
  14. });
  15. app.Run();
  16. class MyDatabaseStateStore : IStateStore
  17. {
  18. // ...
  19. }
  20. class MyDatabaseOutputBinding : IOutputBinding
  21. {
  22. // ...
  23. }
  24. class AnotherStateStore : IStateStore
  25. {
  26. // ...
  27. }

配置多个组件

配置 Dapr 使用托管组件与任何单个组件的配置方式相同 - 组件的 YAML 引用关联的套接字。

  1. #
  2. # This component uses the state store associated with socket `state-store-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 `state-store-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: []