Azure Service Fabric:使用分区键 ID (Int64RangePartitionInformation) 创建代理
Azure Service Fabric : Creating a proxy with the partition key ID (Int64RangePartitionInformation)
我现在有一个小问题要解决,似乎我没有在 SF 框架中找到适合我的解决方案。问题很简单,包括:
我有一个 Int64RangePartition,它允许我通过以下方式找到服务的所有分区:
_fabricClient.QueryManager.GetPartitionListAsync(_globalStatsSvcUri)
这工作正常,但与 NamedPartitions 方案不同,它似乎无法创建服务代理(带远程处理)以在不提供 Int 密钥的情况下使用该服务。
IGlobalStatsSvc globalStatsSvc = ServiceProxy.Create(_globalStatsSvcUri, partitionKey);
我的具体情况是我希望能够扩展并行统计计算服务,但希望能够与配置文件 ID 保持连接。因此我想选择 Int64RangePartition 方案。
但是当我需要查询系统的全局统计信息时,我需要并行调用所有分区,然后使用 Chan' 算法聚合 Avg、Variance 和 Std。
为此,我需要能够在不知道哪个 Int 键映射到分区的情况下创建代理。我只需要分区密钥 ID。
可悲的是,似乎 SF 只允许在 NamedPartition 方案中执行后者,而不是 RangedPartition。
有没有人解决这个特殊情况?选择 NamedPartition 方案可能有效,但在修改统计信息的情况下会更加复杂(至少需要确保随机分区名称在统计上是兼容的)。另一个解决方案是 "manually" 创建服务代理,因为我应该能够使用我解析的分区 ID 构建 URL。但这是更多的工作,绕过 SF 提供的强类型客户端。
将这两种行为与 RangedPartition 方案混合使用会简单得多,因为我可以在编辑时知道要修改哪个分区,然后在需要进行聚合时在读取时查询所有分区。
找到问题的解决方案,我对 SF Framework 还是很陌生,但是当查询服务的分区列表时,有关特定分区的低键和高键 的信息[=给出 18=]。
因此,只需在通过代理调用服务之前传递这些 ID。
足够简单:
var partitionInformation = partition.PartitionInformation as Int64RangePartitionInformation;
var partitionKey = new ServicePartitionKey(partitionInformation.LowKey);
我现在有一个小问题要解决,似乎我没有在 SF 框架中找到适合我的解决方案。问题很简单,包括:
我有一个 Int64RangePartition,它允许我通过以下方式找到服务的所有分区:
_fabricClient.QueryManager.GetPartitionListAsync(_globalStatsSvcUri)
这工作正常,但与 NamedPartitions 方案不同,它似乎无法创建服务代理(带远程处理)以在不提供 Int 密钥的情况下使用该服务。
IGlobalStatsSvc globalStatsSvc = ServiceProxy.Create(_globalStatsSvcUri, partitionKey);
我的具体情况是我希望能够扩展并行统计计算服务,但希望能够与配置文件 ID 保持连接。因此我想选择 Int64RangePartition 方案。
但是当我需要查询系统的全局统计信息时,我需要并行调用所有分区,然后使用 Chan' 算法聚合 Avg、Variance 和 Std。
为此,我需要能够在不知道哪个 Int 键映射到分区的情况下创建代理。我只需要分区密钥 ID。
可悲的是,似乎 SF 只允许在 NamedPartition 方案中执行后者,而不是 RangedPartition。
有没有人解决这个特殊情况?选择 NamedPartition 方案可能有效,但在修改统计信息的情况下会更加复杂(至少需要确保随机分区名称在统计上是兼容的)。另一个解决方案是 "manually" 创建服务代理,因为我应该能够使用我解析的分区 ID 构建 URL。但这是更多的工作,绕过 SF 提供的强类型客户端。
将这两种行为与 RangedPartition 方案混合使用会简单得多,因为我可以在编辑时知道要修改哪个分区,然后在需要进行聚合时在读取时查询所有分区。
找到问题的解决方案,我对 SF Framework 还是很陌生,但是当查询服务的分区列表时,有关特定分区的低键和高键 的信息[=给出 18=]。
因此,只需在通过代理调用服务之前传递这些 ID。
足够简单:
var partitionInformation = partition.PartitionInformation as Int64RangePartitionInformation;
var partitionKey = new ServicePartitionKey(partitionInformation.LowKey);