Использование RestTemplate Spring с сервисом обнаружения и внешними URL - PullRequest
0 голосов
/ 10 сентября 2018

Я работаю над микросервисом Spring REST. Код использует RestTemplate для доступа к другим сервисам. Это настроено так:

@Bean
@LoadBalanced
public RestTemplate restTemplate() {
    return new RestTemplate();
}

При использовании этой конфигурации внедренный экземпляр restTemplate будет разрешать имена служб, указанные в домене, и вызывать соответствующую службу. Например, следующий вызов будет работать: restTemplate.getForEntity("http://service-name/...", ...);

Проблема в том, что мы также хотим использовать внешние сервисы и использовать RestTemplate для их запроса.

Например, http://api.somedomain.com/... не будет работать, приложение будет жаловаться, что служба api.somedomain.com не известна службе обнаружения.

Что делает это более интересным, что в некоторых случаях URL-адрес неизвестен, поэтому во время разработки не известно, будет ли URL-адрес содержать имя службы или старое доброе доменное имя, поэтому следующий код, такой как restTemplate.getForEntity(config.getURL(), ...);, должен работать независимо от что содержит URL. (который может прийти из конфига, БД и т. д.)

Вопрос: возможно ли настроить RestTemplate для этого? Какие могут быть решения этой проблемы?

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

Что вы, ребята, предлагаете?

1 Ответ

0 голосов
/ 23 октября 2018

Вы можете создать еще один компонент RestTemplate без @LoadBalanced, как

@Bean
public RestTemplate externalRestTemplate(){
    return new RestTemplate();
}

И после этого вводить именно этот Боб, как

@Autowired
private RestTemplate externalRestTemplate;
...