如何检查Azure服务结构是否已启动并正在运行?
有没有办法以编程方式检查Service Fabric是否启动并从外部客户端运行?我想过使用try catch块,但我很好奇是否有一种更优雅的方式。如何检查Azure服务结构是否已启动并正在运行?
没有一个“集群正在运行吗?”命令。这个问题有不同的解释方式。
但是对于外部客户端来说,最简单的检查就是简单地尝试与集群进行通信。群集可能“正在运行”,但如果您的客户端无法与它通信,那么它可以在那里停止。要以编程方式执行此操作,您必须捕获通信异常。这里有一个例子:
FabricClient client = new FabricClient();
try
{
await client.QueryManager.GetProvisionedFabricCodeVersionListAsync();
}
catch (FabricTransientException ex)
{
if (ex.ErrorCode == FabricErrorCode.CommunicationError)
{
// can't communicate with the cluster!
}
}
你基本上等待连接超时,因此将需要几秒钟,该检查完成。
如果您的问题是:“如何检查Azure服务结构中的我的服务是否已启动并正在运行?”那么你有一些选择。 (如果您在另一方面的问题是:“我如何检查是否Azure的服务织物集群 启动并运行?”那么你应该看看Vaclav's answer。)
创建的FabricClient
一个新实例,现在你可以做很多有趣的事情,包括检查你的服务的健康状况。
如果您的集群是安全的(推荐),那么您需要提供X509Credentials
。你可以按照这篇文章https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-connect-to-secure-cluster。
var connection = "myclustername.westeurope.cloudapp.azure.com:19000";
var fabricClient = new FabricClient(GetCredentials(clientCertThumb, serverCertThumb, CommonName), connection);
使用相关Manager客户端,您可以检查部署到群集服务的健康状态。
使用FabricClient.ServiceHealthManager
检查各个分区:
var serviceHealth = await fabricClient.HealthManager.GetServiceHealthAsync(serviceName);
foreach (var serviceHealthPartitionHealthState in serviceHealth.PartitionHealthStates)
{
Console.WriteLine($"Health state: {serviceHealthPartitionHealthState.PartitionId} {serviceHealthPartitionHealthState.AggregatedHealthState}");
}
使用FabricClient.QueryManagerClient
检查每个服务的聚集健康:
var serviceList = await fabricClient.QueryManager.GetServiceListAsync(applicationName);
foreach (var service in serviceList)
{
Console.WriteLine($"\tFound service {service.ServiceName} {service.ServiceStatus} {service.HealthState}");
}
如果这些评价任何东西比System.Fabric.Health.HealthState.Ok
那么你的服务可能别人有一些问题。
你的意思是检查你的服务织物集群正在运行,或者如果一个应用程序中的特定应用程序或服务正在运行? – yoape