C# 如何找到服务结构应用程序服务与节点的关联?

C# 如何找到服务结构应用程序服务与节点的关联?,c#,azure-service-fabric,C#,Azure Service Fabric,使用System.Fabric.FabricClient.QueryClient方法从远程服务结构群集提取信息,如何将应用程序服务与承载这些服务的节点相关联 我已经利用了答案中的答案来获取有关我的服务和分区的更多详细信息,但我没有看到将服务映射到节点所需的属性 var fabricClient = new FabricClient(credentials, connectionString); var nodes = fabricClient.QueryManager.GetNodeListAs

使用
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;
e、 g

  • 阿帕
    • 服务A_A
      • NodeFe0
      • 节点1
    • 服务A_B
      • 节点0
      • 节点1
      • 节点2
  • AppB
    • 服务部
      • NodeFe0
      • 节点1

此代码帮助您了解哪些节点上正在运行哪个服务分区

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)}");
              }
         }
    }
 }
var fabricClient=new fabricClient();
var nodes=wait fabricClient.QueryManager.GetNodeListAsync(“”);
var apps=fabricClient.QueryManager.GetApplicationListSync().Result;
foreach(应用程序中的var应用程序)
{
WriteLine($“发现的应用程序:{app.ApplicationName}”);
var deployedPartitions=new Dictionary();
foreach(节点中的var节点)
{
//获取每个节点部署的分区
var deployed=await fabricClient.QueryManager.GetDeployedReplicaListAsync(node.NodeName,app.ApplicationName);
foreach(已部署中的var dep)
{
名单;
如果(!deployedPartitions.TryGetValue(dep.Partitionid,out列表))
{
列表=新列表();
添加(DeployedPartitionId,列表);
}
添加(node.NodeName);
}
}
var services=await fabricClient.QueryManager.GetServiceListAsync(app.ApplicationName);
foreach(服务中的var服务)
{
WriteLine($“发现的服务:{Service.ServiceName}”);
var partitions=await fabricClient.QueryManager.GetPartitionListAsync(service.ServiceName);
foreach(分区中的var分区)
{
var partitionId=partition.PartitionInformation.Id;
if(deployedPartitions.TryGetValue(partitionId,out var nodeNames))
{
Console.WriteLine($“发现的{service.ServiceKind}服务:'{service.ServiceName}分区ID:'{PartitionId}'在节点{string.Join(“,”,nodeNames)}上运行”);
}
}
}
}

谢谢!这正是我想要达到的。我曾尝试使用
getDeployedApplicationListSync
GetDeployedServiceTypeListAsync
,但没有得到我想要的结果。