Azure service fabric 如何获取在c#中运行无状态服务的服务结构节点?

Azure service fabric 如何获取在c#中运行无状态服务的服务结构节点?,azure-service-fabric,service-fabric-stateless,Azure Service Fabric,Service Fabric Stateless,在c#中,我希望获得运行无状态服务的服务结构节点信息列表。这在测试中很有用。我知道如何使用FabricClient类和ActorServiceProxy类为有状态服务执行此操作,但当涉及无状态服务时,我找不到方法。你有什么想法吗 谢谢,您仍然可以使用FabricClient获取此信息。与QueryManager玩一玩,检查您需要的信息 这里有一些快速代码,我可以用来快速查询我们的TenantApp服务的最新版本,然后检查它们是否都在健康状态下运行,或者是否已正确升级 var currentApp

在c#中,我希望获得运行无状态服务的服务结构节点信息列表。这在测试中很有用。我知道如何使用FabricClient类和ActorServiceProxy类为有状态服务执行此操作,但当涉及无状态服务时,我找不到方法。你有什么想法吗


谢谢,

您仍然可以使用FabricClient获取此信息。与QueryManager玩一玩,检查您需要的信息

这里有一些快速代码,我可以用来快速查询我们的TenantApp服务的最新版本,然后检查它们是否都在健康状态下运行,或者是否已正确升级

var currentAppTypes = await fabricClient.QueryManager.GetApplicationTypeListAsync();
var tenantAppTypes = currentAppTypes.Where(x => x.ApplicationTypeName.Equals("TenantAppsType"));
var latestTenantAppType = currentAppTypes.Where(x => x.ApplicationTypeName.Equals("TenantAppsType"))?
.OrderByDescending(x =>
{
    var versions = x.ApplicationTypeVersion.Split('.');
    if (versions.Length == 3)
    {
         return (int.Parse(versions[0]) * 1000000) +
                (int.Parse(versions[1]) * 1000) +
                 int.Parse(versions[2]);
     }
     return 0;
})?.FirstOrDefault();
if (latestTenantAppType != null)
{
       var currentSvcTypes = await fabricClient.QueryManager.GetServiceTypeListAsync(latestTenantAppType.ApplicationTypeName, latestTenantAppType.ApplicationTypeVersion);
      // etc
}
或者,如果您只是想让所有的应用程序运行

var currentApps = await fabricClient.QueryManager.GetApplicationListAsync();
获得服务信息后,可以检查其上的节点,也可以直接检查节点本身

var currentNodes = fabricClient.QueryManager.GetNodeListAsync();
var nodeInfo = await fabricClient.QueryManager.GetNodeLoadInformationAsync("nodeName");

希望这有帮助

您仍然可以使用FabricClient获取此信息。与QueryManager玩一玩,检查您需要的信息

这里有一些快速代码,我可以用来快速查询我们的TenantApp服务的最新版本,然后检查它们是否都在健康状态下运行,或者是否已正确升级

var currentAppTypes = await fabricClient.QueryManager.GetApplicationTypeListAsync();
var tenantAppTypes = currentAppTypes.Where(x => x.ApplicationTypeName.Equals("TenantAppsType"));
var latestTenantAppType = currentAppTypes.Where(x => x.ApplicationTypeName.Equals("TenantAppsType"))?
.OrderByDescending(x =>
{
    var versions = x.ApplicationTypeVersion.Split('.');
    if (versions.Length == 3)
    {
         return (int.Parse(versions[0]) * 1000000) +
                (int.Parse(versions[1]) * 1000) +
                 int.Parse(versions[2]);
     }
     return 0;
})?.FirstOrDefault();
if (latestTenantAppType != null)
{
       var currentSvcTypes = await fabricClient.QueryManager.GetServiceTypeListAsync(latestTenantAppType.ApplicationTypeName, latestTenantAppType.ApplicationTypeVersion);
      // etc
}
或者,如果您只是想让所有的应用程序运行

var currentApps = await fabricClient.QueryManager.GetApplicationListAsync();
获得服务信息后,可以检查其上的节点,也可以直接检查节点本身

var currentNodes = fabricClient.QueryManager.GetNodeListAsync();
var nodeInfo = await fabricClient.QueryManager.GetNodeLoadInformationAsync("nodeName");

希望这能有所帮助

对于仍在尝试这样做的人,我有一个计时器要求,要求我计算出有多少节点在运行我的应用程序。这大致就是我使用的代码:

string currentNodeName = ServiceContext.NodeContext.NodeName;
var fabricClient = new FabricClient();
var nodeList = (await fabricClient.QueryManager.GetNodeListAsync()).ToList();

var serviceName = ServiceContext.ServiceName.LocalPath.Split('/')[1];
var nodesRunningApplication = new List<Node>();
foreach (var node in nodeList)
{
    var nodeApplicationList = await fabricClient.QueryManager.GetDeployedApplicationListAsync(node.NodeName);
    var nodeApplication = nodeApplicationList.FirstOrDefault(p => 
        p.ApplicationName.LocalPath.Split('/')[1] == serviceName);

    if (nodeApplication != null)
    {
        nodesRunningApplication.Add(node);
    }
}
string currentNodeName=ServiceContext.NodeContext.NodeName;
var fabricClient=new fabricClient();
var nodeList=(wait fabricClient.QueryManager.GetNodeListAsync()).ToList();
var serviceName=ServiceContext.serviceName.LocalPath.Split('/')[1];
var nodesRunningApplication=新列表();
foreach(节点列表中的var节点)
{
var nodeApplicationList=等待fabricClient.QueryManager.GetDeployedApplicationListSync(node.NodeName);
var nodeApplication=nodeApplicationList.FirstOrDefault(p=>
p、 ApplicationName.LocalPath.Split('/')[1]==serviceName);
if(nodeApplication!=null)
{
nodesRunningApplication.Add(节点);
}
}

对于仍在尝试这样做的人,我有一个计时器要求,要求我计算有多少节点在运行我的应用程序。这大致就是我使用的代码:

string currentNodeName = ServiceContext.NodeContext.NodeName;
var fabricClient = new FabricClient();
var nodeList = (await fabricClient.QueryManager.GetNodeListAsync()).ToList();

var serviceName = ServiceContext.ServiceName.LocalPath.Split('/')[1];
var nodesRunningApplication = new List<Node>();
foreach (var node in nodeList)
{
    var nodeApplicationList = await fabricClient.QueryManager.GetDeployedApplicationListAsync(node.NodeName);
    var nodeApplication = nodeApplicationList.FirstOrDefault(p => 
        p.ApplicationName.LocalPath.Split('/')[1] == serviceName);

    if (nodeApplication != null)
    {
        nodesRunningApplication.Add(node);
    }
}
string currentNodeName=ServiceContext.NodeContext.NodeName;
var fabricClient=new fabricClient();
var nodeList=(wait fabricClient.QueryManager.GetNodeListAsync()).ToList();
var serviceName=ServiceContext.serviceName.LocalPath.Split('/')[1];
var nodesRunningApplication=新列表();
foreach(节点列表中的var节点)
{
var nodeApplicationList=等待fabricClient.QueryManager.GetDeployedApplicationListSync(node.NodeName);
var nodeApplication=nodeApplicationList.FirstOrDefault(p=>
p、 ApplicationName.LocalPath.Split('/')[1]==serviceName);
if(nodeApplication!=null)
{
nodesRunningApplication.Add(节点);
}
}

Peter,谢谢你的回复。假设我的无状态web api比例号为2。集群共有5个节点。如何找出哪两个节点运行我的web api?我查看了你发布的代码,但找不到它提供这些信息的地方。彼得,谢谢你的回复。假设我的无状态web api比例号为2。集群共有5个节点。如何找出哪两个节点运行我的web api?我查看了你发布的代码,但找不到它提供这些信息的地方。