【问题标题】:Using Spring's RestTemplate with discovery service and external URLs too将 Spring 的 RestTemplate 与发现服务和外部 URL 一起使用
【发布时间】:2018-09-10 08:55:15
【问题描述】:

我正在开发一个 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 的适当实例。检查将是简单而愚蠢的:如果域包含一个点,它绝对不是服务名称。但这是我目前试图避免的事情。

你们有什么建议?

【问题讨论】:

    标签: java spring resttemplate


    【解决方案1】:

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

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

    然后注入这个 Bean 就像

    @Autowired
    private RestTemplate externalRestTemplate;
    

    【讨论】:

      猜你喜欢
      • 2012-05-06
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多