I PCF Service Registry bin mit meinem Mikro Dienst registrieren und mit Hilfe der Discovery-Client des eigentlichen Dienst Urls für Inter Service-Anrufe wie unterStahlkappe Service Registry Entdeckung und einen Hostname der aufgelösten URL prefixing
[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;
}
}
dieses Problem zu beheben funktioniert gut und ich kann die Ziel-Service-URL auflösen. Es gibt jedoch eine neue Anforderung zur Unterstützung eines Host-Namens des Access-Gateways. Der aufgelösten URL sollte der DNS-Name des Access-Gateways wie http://GatewayUrl/CustomerService/api/v1/customers vorangestellt werden. Ich weiß nicht, wie ich das in der Eureka-Konfiguration erreichen soll. Ich habe versucht, den Hostnamen in eureka: instance-Konfiguration wie in http://steeltoe.io/docs/steeltoe-discovery/ erwähnt, aber am Ende wurde die gleiche URL gelöst wie zuvor. Irgendwelche Gedanken dazu. Danke im Voraus.