Есть ли способ программно проверить, работает ли Service Fabric от внешнего клиента? Я думал о том, что просто использовал блоки try catch, но мне любопытно, есть ли более элегантный способ сделать это.Как проверить, работает ли Azure Service Fabric?
ответ
Не существует единого «работает кластер?». команда. Существуют разные способы интерпретации этого вопроса.
Но для внешнего клиента простейшей проверкой вы можете просто попытаться связаться с кластером. Кластер может быть «запущен», но если ваш клиент не может связаться с ним, он может остановиться там. Чтобы сделать это программно, вам нужно поймать исключение связи. Вот пример:
FabricClient client = new FabricClient();
try
{
await client.QueryManager.GetProvisionedFabricCodeVersionListAsync();
}
catch (FabricTransientException ex)
{
if (ex.ErrorCode == FabricErrorCode.CommunicationError)
{
// can't communicate with the cluster!
}
}
Вы в основном ждут связи со временем, так что это займет несколько секунд для этой проверки, чтобы закончить.
Если у вас возникли вопросы: «Как проверить, работает ли моя служба в Azure Service Fabric?» то у вас есть некоторые варианты. (Если ваш вопрос с другой стороны: «Как я могу проверить, если кластер Azure Service Fabric запущен и работает?», То вы должны смотреть на 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);
Использование связанных менеджера клиентов, вы можете проверить состояние здоровья служб, развернутых на кластере.
Использование 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
тогда ваша служба может есть некоторые проблемы.
Вы хотите проверить, работает ли ваш кластер службы Fabric или работает ли какое-либо приложение или служба в приложении? – yoape