2

Мы используем два микросервиса (яблоко и банан), один сервер реестра (реестр) и один GUI-клиент (клиент).Spring Data REST ссылки и лента Клиент loadbalancer

В Microservices выставить свои ресурсы с Spring Data Rest, поэтому ссылка для одного ресурса в HAL ресурс, представляющий список яблок может выглядеть следующим образом:

"link_": "http://localhost:8080/apples/123", or "http://192.168.0.23/..." 

, в зависимости от того, как я получить доступ к списку ,

restTemplate в GUI (резервное копирование с помощью ленты) может управлять первый вызов на получение списка, потому что я вручную использовать адрес

http://apple/apples 

лента будет выглядеть вверх яблоко идентификатор клиента и измените адрес запроса на «http://localhost:8080/apples».

Но теперь я не могу пройти через найденные ссылки, потому что они больше не будут указывать на идентификатор клиента и не будут получать никакого баланса. Также, если этот peticular экземпляр будет умирать, URL-адрес в ссылке не будет действителен, даже если другие экземпляры все еще работают.

Есть ли способ изменить хост, который Spring Data REST помещает в ссылки на фиксированное значение?

ответ

1

В настоящее время нет. В our sample, который использует Spring Data Rest, у нас такая же проблема. Этот PR был просто объединен, что могло бы помочь.

+0

Спасибо за ваш ответ! –

1

Я завернул RibbonClientHttpRequestFactory из Spencer Gibb, чтобы обмануть Spring Data REST. Я не буду рекомендовать это решение, его только временное.

template.setRequestFactory((uri, httpMethod) -> { 
    final ClientHttpRequest request = ribbonClientHttpRequestFactory.createRequest(uri, httpMethod); 
    if (!uri.equals(request.getURI())) 
     request.getHeaders().add("X-Forwarded-Host",uri.getHost()); 
    return request; 
});