在 c# 中,我想获取运行无状态服务的服务结构节点信息列表。这将在测试中很有用。我知道如何使用 FabricClient 类和 ActorServiceProxy 类为有状态服务执行此操作,但是对于无状态服务,我找不到方法。你有想法吗?
谢谢,
在 c# 中,我想获取运行无状态服务的服务结构节点信息列表。这将在测试中很有用。我知道如何使用 FabricClient 类和 ActorServiceProxy 类为有状态服务执行此操作,但是对于无状态服务,我找不到方法。你有想法吗?
谢谢,
对于仍在尝试执行此操作的任何人,我有一个计时器要求,要求我计算出有多少节点正在运行我的应用程序。这大致是我使用的代码:
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);
}
}
您仍然可以使用 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");
希望这可以帮助