Java 使用弹簧&x27;使用发现服务和外部URL创建RestTemplate
我在做一个SpringRest微服务。代码使用RestTemplate访问其他服务。它的配置如下:Java 使用弹簧&x27;使用发现服务和外部URL创建RestTemplate,java,spring,resttemplate,Java,Spring,Resttemplate,我在做一个SpringRest微服务。代码使用RestTemplate访问其他服务。它的配置如下: @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } 使用此配置,注入的restTemplate实例将解析域中指定的服务名称,并调用相应的服务。例如,以下调用将起作用:restemplate.getForEntity(“http://service-name/...",
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
使用此配置,注入的restTemplate实例将解析域中指定的服务名称,并调用相应的服务。例如,以下调用将起作用:restemplate.getForEntity(“http://service-name/...", ...);代码>
问题是,我们还希望使用外部服务并使用RestTemplate查询它们
例如http://api.somedomain.com/...
无法工作,应用程序会抱怨发现服务不知道该服务api.somedomain.com
更有趣的是,在某些情况下,URL是未知的,因此在开发过程中不知道URL是否包含服务名称或旧域名,因此下面的代码类似于restemplate.getForEntity(config.getURL(),…)无论URL包含什么,代码>都应该工作。(可能来自配置、数据库或其他)
问题是:是否可以将RestTemplate配置为这样做?有什么办法可以解决这个问题
我唯一能想到的就是使用一个工厂,它返回一个知道URL的适当实例。检查将是简单而愚蠢的:如果域包含一个点,它肯定不是一个服务名。但这是我目前正在努力避免的事情
你们有什么建议吗?你们可以在不使用@LoadBalanced的情况下创建另一个RestTemplate Bean,比如
@Bean
public RestTemplate externalRestTemplate(){
return new RestTemplate();
}
在那之后,注入像豆子一样的东西
@Autowired
private RestTemplate externalRestTemplate;