首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Steeltoe服务注册表发现,并为解析的url添加主机名前缀。

Steeltoe服务注册表发现,并为解析的url添加主机名前缀。
EN

Stack Overflow用户
提问于 2017-09-09 00:20:51
回答 1查看 890关注 0票数 1

我正在使用PCF Service Registry注册我的微服务,并使用discovery client解析服务间调用的实际服务urls,如下所示

代码语言:javascript
复制
[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配置中实现这一点。我尝试将主机名放在http://steeltoe.io/docs/steeltoe-discovery/中提到的eureka:instance configuration中,但最终得到的是与前面一样解析的url。对此有什么想法。提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-03-02 22:24:08

要使用非自动配置的主机名注册服务,请将主机名置于eureka:instance:hostName中,并将eureka:instance:registrationMethod设置为hostname

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46120795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档