当前位置: 首页 > 知识库问答 >
问题:

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

华振
2023-03-14

我正在开发一个Spring REST微服务。代码使用RestTemboard访问其他服务。它是这样配置的:

@Bean
@LoadBalanced
public RestTemplate restTemplate() {
    return new RestTemplate();
}

使用此配置,注入的restTemplate实例将解析域中指定的服务名称,并调用相应的服务。例如,以下调用将起作用:restemplate。getForEntity(“http://service-name/...“,…);

问题是,我们还希望使用外部服务并使用RestTemplate查询它们。

例如http://api.somedomain.com/...不起作用,应用程序会抱怨发现服务不知道服务api.somedomain.com

更有趣的是,在某些情况下,网址是未知的,所以在开发过程中不知道网址是否包含服务名称或一个好的旧域名,所以下面的代码像restTemplate.getForEntity(config.getURL(),...);应该工作,不管URL包含什么。

问题是:是否可以将RestTemplate配置为这样做?有什么办法可以解决这个问题?

我唯一能想到的就是使用一个工厂,它返回一个知道URL的适当实例。检查将是简单而愚蠢的:如果域包含一个点,它肯定不是一个服务名。但这是我目前正在努力避免的事情。

你们有什么建议?

共有1个答案

章永安
2023-03-14

您可以在不使用@LoadBalanced的情况下创建另一个RestTemplate Bean,如

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

之后注射这种豆子

@Autowired
private RestTemplate externalRestTemplate;
 类似资料:
  • 我想通过STS在Spring Boot中使用JPA和SQL Server。这是我的表: 马文 application.properties 模型.Account.class 接口账户 ServiceAccount.class 服务帐户类 我在控制器中调用了方法add帐户(),这是我得到的异常 "java.lang.NoClassDefFoundError: org/spingFramework/o

  • 根据这里和那里的文档,我设法设置了一个授权服务器,该服务器提供使用非对称密钥签名的JWT访问令牌,资源服务器使用公钥的本地副本在本地验证这些令牌。到现在为止,一直都还不错。 我的最终目标是让资源服务器在授权服务器上使用JWKSendpoint,并使用JWT中的“kid”头在JWKS中查找正确的密钥并在本地进行验证,从而支持密钥轮换。我发现了如何使授权服务器公开JWKSendpoint,以及如何为资

  • 我正在将我的Spring应用程序从Spring-boot 1.5.9迁移到Spring-boot 2.0.0。使用这个新的Spring包,我在Redis中缓存数据时遇到了一些问题。 在我的配置中,我有3个具有不同TTL(长、中、短)的CacheManager: 我还有一个自定义RestTemplate: 在上一个Spring版本中,缓存的每个数据都使用这个RestTemplate,并使用Gener

  • 我是个很新的程序员。我在工作中的任务之一是让我们的定制工具创建草稿电子邮件,并将其放入运行该工具的用户的草稿电子邮件文件夹中。我们目前使用Exchange Server 2010(但正在迁移到Exchange Online)。 这个链接讨论了UseDefaultCredentials,但我似乎不知道如何实现它。我创建了一个名为service的ExchangeService对象,并使用以下凭据与Ex

  • 问题内容: 我正在尝试在URL中传递路径参数和查询参数,但出现一个奇怪的错误。下面是代码 我的网址正在变成 我应该怎么做才能使其正常工作。我期望参数可以将id添加到网址中 请提出建议。提前致谢 问题答案: 我将使用from 来传递所有类型的URI参数。 例如:

  • 我们有一个现有的带有logstash、config和eureka服务器的微服务环境。我们现在正在设置Spring Cloud Dataflow(库伯内特斯)环境(主要最初用于运行任务/批处理作业)。 理想情况下,我们希望任务通过标准Spring Boot配置(注释等)使用现有的logstash、config和eureka服务器来支持以下场景: Logstash:当任务运行时,其日志输出到Logst