private string GetServiceUrl(Consul.IConsulClient consulClient, string requestedServiceName) { var services = consulClient.Agent.Services().Result; Consul.AgentService service = services.Response.Values.FirstOrDefault(x => x.Service == requestedServiceName); return((service != null) ? $"{service.Address}:{service.Port}" : throw new ArgumentNullException(nameof(service))); }
public PricingClient(IConfiguration configuration, Consul.IConsulClient consulClient) { //TODO: find better way to resolve hostname in http handler string baseUrl = GetServiceUrl(consulClient, "pricing-service"); string pricingServiceUrl = configuration.GetValue <string>("PricingServiceUri").Replace("pricing-service", baseUrl); HttpClient httpClient = new HttpClient() { BaseAddress = new Uri(pricingServiceUrl) }; JsonSerializerSettings settings = new JsonSerializerSettings() { ContractResolver = new CamelCasePropertyNamesContractResolver() }; this._client = new RestClient(httpClient) { JsonSerializerSettings = settings }.For <IPricingClient>(); }