[英]How to get instance count of Service Fabric microservices?
我有服务 它向第三方API发出请求。 由于该API设置了每秒的请求数量,因此我需要为我的请求设置限制。
<DefaultServices>
<Service Name="MyService">
<StatelessService ServiceTypeName="MyService" InstanceCount="-1">
<UniformInt64Partition PartitionCount="5" LowKey="0" HighKey="5" />
</StatelessService>
</Service>
</DefaultServices>
我有这个配置。 如果我没记错的话,“-1”表示最大可用金额。
如何获得“ MyService”实例的数量? 我还应该计算分区数量以获得实际数量吗?
简单来说,就是将分区数量乘以服务具有的已分配副本(有状态)或实例(无状态)的数量:
在您的情况下,将实例计数设置为-1,假设节点数为3,则数学公式为:
3(instances) * 5(partitions) = 15 (instances)
使用PowerShell
$instances = 0
foreach ($partition in Get-ServiceFabricPartition -ServiceName "fabric:/AppName/ServiceName") {
foreach ($replica in Get-ServiceFabricReplica -PartitionId $partition.PartitionId)
{
if($replica.ReplicaStatus -eq 'Ready'){
$instances++
}
}
}
echo $instances
使用FabricClient:
int instances = 0;
var fabricClient = new FabricClient();
var partitions = await fabricClient.QueryManager.GetPartitionListAsync(new Uri("fabric:/AppName/ServiceName"));
foreach (var partition in partitions)
{
instances += (await fabricClient.QueryManager.GetReplicaListAsync(partition.PartitionInformation.Id)).Where(r => r.ReplicaStatus == ServiceReplicaStatus.Ready).Count();
}
上面的脚本应适用于有状态和无状态。
有一些警告:
InstanceCount为-1表示服务实例正在群集中的每个节点上运行。 因此,一个5节点群集将运行5个MyService
实例,每个节点上一个实例。 无状态服务没有分区(只有一个分区SingletonPartition
)
因此,获取实例数可以只看InstanceCount的值。 如果它是<> -1,则它是节点数,否则,它是实例数。
如果您希望通过编程方式尝试使用FabricClient类:
var fabricClient = new FabricClient();
var partitions = await fabricClient.QueryManager.GetPartitionListAsync(new Uri("fabric:/Application2/Stateless1"));
var singletonPartition = (StatelessServicePartition)partitions.First(); // stateless service has just one partition
Console.WriteLine(singletonPartition.InstanceCount);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.