在c#中,我想获得运行无状态服务的服务结构节点信息列表。这在测试中很有用。我知道如何使用FabricClient类和ActorServiceProxy类为有状态服务执行此操作,但是当涉及无状态服务时,我找不到方法。你有什么想法吗?
谢谢,
答案 0 :(得分:1)
您仍然可以使用FabricClient获取此信息。与QueryManager一起玩,检查您需要的信息
这里有一些快速代码,用于快速查询我们的TenantApp服务的最新版本,然后检查他们是否全部在健康状态下运行,或者他们已正确升级。< / p>
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");
希望这有帮助
答案 1 :(得分:0)
对于仍在尝试执行此操作的任何人,我都有一个计时器要求,该要求要求我确定有多少节点正在运行我的应用程序。这大概是我使用的代码:
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);
}
}