【发布时间】:2015-02-12 15:26:03
【问题描述】:
我成功地让我的 RestTemplate 客户端使用 Eureka 发现远程服务,并使用功能区将调用转发给它,如文档中所述。 基本上,只需在我的 Application 类中添加以下注解,剩下的就交给 Spring-Boot 的魔法吧:
@Configuration
@ComponentScan
@EnableAutoConfiguration
@EnableDiscoveryClient
(PS:您注意到我使用的是 spring-cloud:1.0.0-SNAPSHOT-BUILD 而不是 1.0.0.M3 - 但这似乎不会影响我的问题)。
当两个服务实例启动时,rest-template客户端成功地在两者之间负载均衡请求。但是,如果第一个实例在 Eureka 负载均衡器通知之前停止,客户端将不会回退到第二个实例,而是抛出异常。
因此我的问题是:有没有办法配置 RestTemplate/Ribbon/Eureka 堆栈,以在选择第一个位置的实例不可用时自动重试对另一个实例的调用? Zuul 代理和 feign 客户端“开箱即用”执行此操作,因此我相信该库拥有必要的功能......
有什么想法/提示吗?
谢谢, /伯特兰
【问题讨论】:
-
或者是因为与 RestTemplate 的集成是使用拦截器完成的,其唯一目的是将 serviceId 转换为适当的 URL,但不会包装整个调用过程,因此无法执行任何“重试”逻辑?
标签: netflix spring-cloud