Обнаружение реестра службы Steeltoe и добавление префикса имени хоста к разрешенному URL-адресу

Я использую реестр служб PCF для регистрации своих микрослужб и использую клиент обнаружения для разрешения фактических URL-адресов служб для вызовов между службами, как показано ниже.

[Route("api/[controller]")]
    public class CustomerController: Controller
    {
        private DiscoveryHttpClientHandler discHttpHandler;

        private ILogger<ValuesController> logger;

        private const string RANDOM_CUSTOMER_URL = "https://CustomerService/api/v1/customer/";

        //private const string RANDOM_CUSTOMER_URL = "http://localhost:58227/api/v1/customer/";

        public CustomerController(IDiscoveryClient client, ILogger<ValuesController> logger)
        {
            this.logger = logger;
            this.discHttpHandler = new DiscoveryHttpClientHandler(client);
        }

        /// <summary>
        /// Retrieves the customer name by invoking Customer Service via 
        /// Service registry lookup
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [Route("GetCustomerName/{id}")]
        [HttpGet]
        public async Task<IActionResult> GetCustomerName(int id)
        {
            try
            {
                var client = GetClient();
                var resString = await client.GetAsync(RANDOM_CUSTOMER_URL + id).
                    Result.Content.ReadAsStringAsync();
                var respObj = JsonConvert.DeserializeObject<ApiResponse<CustomerDTO>>(resString);
                if (respObj != null)
                {
                    return Ok(new { CustomerName = respObj.Result.FirstName + ", " + respObj.Result.LastName });
                }
                return NotFound();
            }
            catch (Exception ex)
            {
                logger.LogError(default(EventId), ex, ex.ToString());
                return StatusCode(500);
            }
        }

        /// <summary>
        /// Create an Http client backed by Steeltoe's DiscoveryHttpClientHandler
        /// </summary>
        /// <returns></returns>
        private HttpClient GetClient()
        {
            var client = new HttpClient(discHttpHandler, false);
            return client;
        }
    }

Это работает нормально, и я могу разрешить целевой URL-адрес службы. Но есть новое требование для поддержки имени хоста шлюза доступа, например, разрешенный URL-адрес должен иметь префикс имени DNS шлюза доступа, например http://GatewayUrl/CustomerService/api/v1/customers. Я не знаю, как это сделать в конфигурации Eureka. Я попытался указать имя хоста в конфигурации eureka:instance, как указано в http://steeltoe.io/docs/steeltoe-discovery/, но в итоге был разрешен тот же URL, что и раньше. Любые мысли по этому поводу. Заранее спасибо.


person Sajan    schedule 08.09.2017    source источник


Ответы (1)


Чтобы зарегистрировать службу с неавтоматически настроенным именем хоста, поместите имя хоста в eureka:instance:hostName И установите eureka:instance:registrationMethod в hostname.

person Tim    schedule 02.03.2018
comment
eureka: { client: { shouldRegisterWithEureka: true, shouldFetchRegistry: false }, instance: { statusPageUrlPath: /api-docs/swagger, healthCheckUrlPath: /HealthCheck, hostName: customerservice1-mycomp.net, RegistrationMethod: hostname } } Я зарегистрировал свою цель обслуживание, как указано выше. И в моей исходной службе я использую URL-адрес CUSTOMERSERVICE/api/v1/customer для разрешения. Но похоже, что после указания неправильного имени хоста оно также работает (означает, что действует какой-то другой метод регистрации). - person Sajan; 16.03.2018