我已按照此处的步骤在 Azure 中的资源组上创建反向代理。 https://learn.microsoft.com/en-us/azure/service-fabric/service-fabric-reverseproxy
我相信反向代理正在工作,因为我以前收到 404 错误,现在收到 400 错误请求。
错误代码为 FABRIC_E_INVALID_PARTITION_KEY
这是有道理的,因为在文档中,它说对于不使用单例分区的服务,您必须指定分区键和分区类型,如下所示:
http://mycluster.eastus.cloudapp.azure.com:19008/MyApp/MyService?PartitionKey=3&PartitionKind=Int64Range
我的问题是,如何获取该分区 key ?文档明确指出它不是在资源管理器中生成的 GUID,因此我无法使用它。我正在从结构外部的外部应用程序联系此有状态服务。
最佳答案
您在 Service Explorer 中看到的 PartitionId
是您的服务请求最终所在分区的唯一 ID。 PartitionKey
与 PartitionId
不同,它是进入分区哈希的键,并且基于该键的请求最终会进入分区on 计算自。
在应用程序项目的 ApplicationManifest.xml
中,新创建的服务的分区键如下所示:
<Service Name="MyService">
<StatefulService ServiceTypeName="MyServiceType"
TargetReplicaSetSize="[MyService_TargetReplicaSetSize]"
MinReplicaSetSize="[MyService_MinReplicaSetSize]">
<UniformInt64Partition PartitionCount="[MyService_PartitionCount]"
LowKey="-9223372036854775808"
HighKey="9223372036854775807" />
</StatefulService>
</Service>
这里的UniformInt64Partition
表明它是一个使用的Int64Range
。 LowKey
和 HighKey
给出了可接受的 PartitionKey 的范围。 PartitionCount
给出运行此服务的分区数量。在统一范围内,分区从低键到高键统一映射。您可能应该将范围更改为对您的特定服务更有意义的值。例如:
<Parameters>
...
<Parameter Name="MyService_PartitionCount" DefaultValue="2" />
...
</Parameters>
...
<Service Name="MyService">
<StatefulService ServiceTypeName="MyServiceType"
TargetReplicaSetSize="[MyService_TargetReplicaSetSize]"
MinReplicaSetSize="[MyService_MinReplicaSetSize]">
<UniformInt64Partition PartitionCount="[MyService_PartitionCount]"
LowKey="0"
HighKey="11" />
</StatefulService>
</Service>
这将为我们提供 2 个映射分区:
- 0 - 5:分区 0
- 6 - 11:分区 1
分区范围大于分区数量对于我们以后无需更改分区键进行扩展至关重要。如果我们在上面的示例中将分区数量加倍(横向扩展)到 4 个分区,那么映射将变为:
- 0 - 2:分区 0
- 3 - 5:分区 1
- 6 - 8:分区 2
- 9 - 11:分区 3
但是我们使用的分区键不会改变,这意味着服务的客户端不会受到影响。类似的推理也适用于命名方案。另一种可能的方案是 Singleton,该方案通常用于无状态服务。
可以在此处找到 Microsoft 有关服务分区的文档: https://learn.microsoft.com/en-us/azure/service-fabric/service-fabric-concepts-partitioning
回到您的问题,您的分区键可以是您在 list 中指定的 LowKey 和 HighKey 范围内的任何整数(如果您使用 UniformInt64Partition
)。您收到 FABRIC_E_INVALID_PARTITION_KEY
错误表明提供的 key 不是有效的整数。如果超出可接受的范围,您可能会收到 FABRIC_E_KEY_NOT_FOUND
错误。
关于azure - 在 Azure Service Fabric 中查找有状态服务的分区键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41558308/