还将Spring的RestTemplate与发现服务和外部URL一起使用

时间:2018-09-10 08:55:15

标签: java spring resttemplate

我正在开发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 :(得分:0)

您可以在没有@LoadBalanced的情况下创建RestTemplate的另一个Bean,例如

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

然后注入完全像这样的Bean

@Autowired
private RestTemplate externalRestTemplate;