ada*_*039 7 azure azure-service-fabric
我已按照此处的步骤在Azure中的资源组上创建反向代理.https://docs.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
Run Code Online (Sandbox Code Playgroud)
我的问题是,我如何获得该分区键?文档明确声明它不是资源管理器中生成的GUID,因此我无法使用它.我正在从结构外部的外部应用程序联系此有状态服务.
yoa*_*ape 12
在PartitionId
您的浏览器服务看到的是,您的服务请求在结束了分区的唯一的ID.的PartitionKey
是不一样的PartitionId
,这是相当的进入进分区散列以及基于所述密钥以该密钥的请求结束了对由下式计算的分区.
在ApplicationManifest.xml
Application项目中,新创建的服务的分区键如下所示:
<Service Name="MyService">
<StatefulService ServiceTypeName="MyServiceType"
TargetReplicaSetSize="[MyService_TargetReplicaSetSize]"
MinReplicaSetSize="[MyService_MinReplicaSetSize]">
<UniformInt64Partition PartitionCount="[MyService_PartitionCount]"
LowKey="-9223372036854775808"
HighKey="9223372036854775807" />
</StatefulService>
</Service>
Run Code Online (Sandbox Code Playgroud)
这里UniformInt64Partition
表示它Int64Range
是使用的.在LowKey
和HighKey
给接受PartitionKeys的范围.该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>
Run Code Online (Sandbox Code Playgroud)
这将为我们提供2个映射的分区:
分区范围大于分区数是不可或缺的,允许我们稍后扩展而不必更改分区键.如果我们在上面的示例中将分区数量(向外扩展)加倍到4个分区,则映射将变为:
但是,我们使用的分区键不会更改,这意味着服务的客户端不会受到影响.命名方案也有类似的推理.另一种可能的方案是Singleton,其中一种通常用于无状态服务.
有关服务分区的Microsoft文档可以在这里找到:https: //docs.microsoft.com/en-us/azure/service-fabric/service-fabric-concepts-partitioning
回到你的问题,你的分区键可以是你在清单中指定的LowKey和HighKey范围内的任何整数(如果你使用的话UniformInt64Partition
).您收到FABRIC_E_INVALID_PARTITION_KEY
错误表明提供的密钥不是有效的整数.如果它超出了可接受的范围,则可能会FABRIC_E_KEY_NOT_FOUND
出现错误.
小智 4
这取决于您选择的分区类型。
要找到它:
在 SF 资源管理器中,导航到有状态服务,然后选择一个分区。在“Essentials”选项卡上,它显示分区类型和密钥。
使用内置反向代理的缺点正是您所处的这种情况。调用者需要详细了解服务分区。这就是为什么我选择使用自定义无状态服务作为代理,并自己根据上下文路由调用。(例如,租户/用户 ID 的哈希值可能会生成 int64 分区键)
归档时间: |
|
查看次数: |
4228 次 |
最近记录: |