Использование spring resttemplate со службой обнаружения и внешними url-адресами

Я работаю над микросервисом 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-адрес. Проверка будет простой и глупой: если в домене есть точка, это точно не имя службы. Но сейчас я стараюсь этого избегать.

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

0
0
927
1

Ответы 1

Вы можете создать другой Bean of RestTemplate без @LoadBalanced, например

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

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

@Autowired
private RestTemplate externalRestTemplate;

Другие вопросы по теме