【问题标题】:Create service instances with parameters in Service Fabric在 Service Fabric 中使用参数创建服务实例
【发布时间】:2017-12-15 08:06:46
【问题描述】:

我正在将 Azure 上的 Service Fabric 用于一个工作项目,简而言之,我有一个服务,其功能是从 IoT 中心读取数据。

就目前而言,该服务正在同时从 32 个分区(多个线程)读取数据,但我试图将其重构为每个分区一个服务实例。问题是我找不到一种方法来创建 32 个服务实例并通知它应该读取的 Hub 分区的每个实例(也许是参数?)。

如果需要,我可以提供代码示例,但我觉得问题不言自明。

【问题讨论】:

  • 为什么不创建一个有 32 个分区的有状态服务呢?服务中的每个分区都将从 IoT 中心的单个分区中读取。另一种选择是具有 32 个实例的应用程序。您可以将所有 32 个实例放在 部分中 - 它们每个都需要一个唯一的名称,例如面料:/MyApp/Service01,面料:/MyApp/Service02等
  • 实际上你可能甚至不需要使用有状态服务。您可以使用 32 个实例执行常规无状态服务。
  • @Dismissile 你的分区想法奏效了!随意发布一个答案,我会接受它作为最好的答案。

标签: c# azure microservices azure-service-fabric azure-iot-hub


【解决方案1】:

您可以创建一个有 32 个分区的有状态服务。服务中的每个分区都将从 IoT 中心的单个分区中读取。您也可以将其作为具有 32 个实例的后台工作程序(不是 Web api)的无状态服务来执行。您需要某种方式来协调哪个实例/分区与每个 IoT 分区进行通信。

如果您坚持拥有 32 个服务实例,那么您只需要确保每个服务实例都有一个唯一的名称。您可以将这些服务放在 ApplicationManifest 的部分中:

<DefaultServices>
    <Service Name="Service01">
        <StatelessService ServiceTypeName="MyServiceType" InstanceCount="1">
            <SingletonPartition />
        </StatelessService>
    </Service>
    <Service Name="Service02">
        <StatelessService ServiceTypeName="MyServiceType" InstanceCount="1">
            <SingletonPartition />
        </StatelessService>
    </Service>
    ...
</DefaultServices>

【讨论】:

    猜你喜欢
    • 2018-10-19
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 2016-08-15
    • 2019-04-29
    • 2018-04-27
    • 2019-09-10
    • 1970-01-01
    相关资源
    最近更新 更多