如何找到 Service Fabric 应用程序服务与节点的关联?
How to find association of Service Fabric application services to nodes?
使用 System.Fabric.FabricClient.QueryClient
方法从远程服务结构集群中提取信息,如何将应用程序服务与托管这些服务的节点相关联?
我已经利用 答案中的答案来获取有关我的服务和分区的更多详细信息,但我没有看到将服务映射到节点所需的属性。
var fabricClient = new FabricClient(credentials, connectionString);
var nodes = fabricClient.QueryManager.GetNodeListAsync().Result;
var apps = fabricClient.QueryManager.GetApplicationListAsync().Result;
var services = fabricClient.QueryManager.GetServiceListAsync(app.ApplicationName).Result;
var partitions = fabricClient.QueryManager.GetPartitionListAsync(service.ServiceName).Result;
例如
- AppA
- ServiceA_A
- NodeFe0
- NodeFe1
- ServiceA_B
- NodeBe0
- NodeBe1
- NodeBe2
- 应用B
- ServiceB_A
- NodeFe0
- NodeFe1
此代码可帮助您大致了解哪个服务分区运行在哪些节点
上
var fabricClient = new FabricClient();
var nodes = await fabricClient.QueryManager.GetNodeListAsync("");
var apps = fabricClient.QueryManager.GetApplicationListAsync().Result;
foreach (var app in apps)
{
Console.WriteLine($"Discovered application:'{app.ApplicationName}");
var deployedPartitions = new Dictionary<Guid, List<string>>();
foreach (var node in nodes)
{
//get deployed partitions per node
var deployed = await fabricClient.QueryManager.GetDeployedReplicaListAsync(node.NodeName, app.ApplicationName);
foreach (var dep in deployed)
{
List<string> list;
if (!deployedPartitions.TryGetValue(dep.Partitionid, out list))
{
list = new List<string>();
deployedPartitions.Add(dep.Partitionid, list);
}
list.Add(node.NodeName);
}
}
var services = await fabricClient.QueryManager.GetServiceListAsync(app.ApplicationName);
foreach (var service in services)
{
Console.WriteLine($"Discovered Service:'{service.ServiceName}");
var partitions = await fabricClient.QueryManager.GetPartitionListAsync(service.ServiceName);
foreach (var partition in partitions)
{
var partitionId = partition.PartitionInformation.Id;
if (deployedPartitions.TryGetValue(partitionId, out var nodeNames))
{
Console.WriteLine($"Discovered {service.ServiceKind} Service:'{service.ServiceName} PartitionId: '{partitionId}' running on nodes {string.Join(", ", nodeNames)}");
}
}
}
}
使用 System.Fabric.FabricClient.QueryClient
方法从远程服务结构集群中提取信息,如何将应用程序服务与托管这些服务的节点相关联?
我已经利用
var fabricClient = new FabricClient(credentials, connectionString);
var nodes = fabricClient.QueryManager.GetNodeListAsync().Result;
var apps = fabricClient.QueryManager.GetApplicationListAsync().Result;
var services = fabricClient.QueryManager.GetServiceListAsync(app.ApplicationName).Result;
var partitions = fabricClient.QueryManager.GetPartitionListAsync(service.ServiceName).Result;
例如
- AppA
- ServiceA_A
- NodeFe0
- NodeFe1
- ServiceA_B
- NodeBe0
- NodeBe1
- NodeBe2
- ServiceA_A
- 应用B
- ServiceB_A
- NodeFe0
- NodeFe1
- ServiceB_A
此代码可帮助您大致了解哪个服务分区运行在哪些节点
上var fabricClient = new FabricClient();
var nodes = await fabricClient.QueryManager.GetNodeListAsync("");
var apps = fabricClient.QueryManager.GetApplicationListAsync().Result;
foreach (var app in apps)
{
Console.WriteLine($"Discovered application:'{app.ApplicationName}");
var deployedPartitions = new Dictionary<Guid, List<string>>();
foreach (var node in nodes)
{
//get deployed partitions per node
var deployed = await fabricClient.QueryManager.GetDeployedReplicaListAsync(node.NodeName, app.ApplicationName);
foreach (var dep in deployed)
{
List<string> list;
if (!deployedPartitions.TryGetValue(dep.Partitionid, out list))
{
list = new List<string>();
deployedPartitions.Add(dep.Partitionid, list);
}
list.Add(node.NodeName);
}
}
var services = await fabricClient.QueryManager.GetServiceListAsync(app.ApplicationName);
foreach (var service in services)
{
Console.WriteLine($"Discovered Service:'{service.ServiceName}");
var partitions = await fabricClient.QueryManager.GetPartitionListAsync(service.ServiceName);
foreach (var partition in partitions)
{
var partitionId = partition.PartitionInformation.Id;
if (deployedPartitions.TryGetValue(partitionId, out var nodeNames))
{
Console.WriteLine($"Discovered {service.ServiceKind} Service:'{service.ServiceName} PartitionId: '{partitionId}' running on nodes {string.Join(", ", nodeNames)}");
}
}
}
}