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