Fix bug: (#810)

If the registered Consul node is unexpectedly down and not restarted immediately, other services should continue to find the registered service.
This commit is contained in:
philia 2019-03-19 22:38:01 +08:00 committed by Thiago Loureiro
parent 46c1fe28df
commit 19c80afb05

View File

@ -27,7 +27,7 @@
public async Task<List<Service>> Get() public async Task<List<Service>> Get()
{ {
var queryResult = await _consul.Health.Service(_config.KeyOfServiceInConsul, string.Empty, true); var queryResult = await _consul.Catalog.Service(_config.KeyOfServiceInConsul, string.Empty);
var services = new List<Service>(); var services = new List<Service>();
@ -39,26 +39,26 @@
} }
else else
{ {
_logger.LogWarning($"Unable to use service Address: {serviceEntry.Service.Address} and Port: {serviceEntry.Service.Port} as it is invalid. Address must contain host only e.g. localhost and port must be greater than 0"); _logger.LogWarning($"Unable to use service Address: {serviceEntry.Address} and Port: {serviceEntry.ServicePort} as it is invalid. Address must contain host only e.g. localhost and port must be greater than 0");
} }
} }
return services.ToList(); return services.ToList();
} }
private Service BuildService(ServiceEntry serviceEntry) private Service BuildService(CatalogService serviceEntry)
{ {
return new Service( return new Service(
serviceEntry.Service.Service, serviceEntry.ServiceName,
new ServiceHostAndPort(serviceEntry.Service.Address, serviceEntry.Service.Port), new ServiceHostAndPort(serviceEntry.Address, serviceEntry.ServicePort),
serviceEntry.Service.ID, serviceEntry.ServiceID,
GetVersionFromStrings(serviceEntry.Service.Tags), GetVersionFromStrings(serviceEntry.ServiceTags),
serviceEntry.Service.Tags ?? Enumerable.Empty<string>()); serviceEntry.ServiceTags ?? Enumerable.Empty<string>());
} }
private bool IsValid(ServiceEntry serviceEntry) private bool IsValid(CatalogService serviceEntry)
{ {
if (string.IsNullOrEmpty(serviceEntry.Service.Address) || serviceEntry.Service.Address.Contains("http://") || serviceEntry.Service.Address.Contains("https://") || serviceEntry.Service.Port <= 0) if (string.IsNullOrEmpty(serviceEntry.Address) || serviceEntry.Address.Contains("http://") || serviceEntry.Address.Contains("https://") || serviceEntry.ServicePort <= 0)
{ {
return false; return false;
} }