我想在spring-cloud-Eureka支持的微服务应用程序中使用以下功能.
1)负载平衡 - 如果我有一个服务的3个节点,它们之间应该发生负载平衡
2)重试逻辑 - 如果其中一个节点没有响应,则在返回另一个节点之前,应该对某个数字(例如3.应该是可配置的)进行重试.
3)断路器 - 如果由于某些原因,所有3个服务节点都有一些问题访问db并抛出异常或没有响应,电路应该打开,后退方法调用,电路在服务恢复后自动关闭.
看一下Spring-cloud的很多例子,我想通了
1)RestTemplate将帮助选项1.但是当RestTemplate访问一个服务实例并且如果节点失败时,它会尝试其他两个节点吗?
2)Hystix将帮助断路器选项(上面的3).但是如果只有一个节点没有响应,它会在打开电路和调用回退方法之前尝试其他节点.一旦服务恢复,它会自动关闭电路吗?
3)如何使用spring-cloud获得retryLogic?我知道@Retryable注释.但它会在以下情况下有所帮助吗?重试一个节点3次,失败后,在断路器启动前尝试下一个节点3次,最后一个节点3次.
我看到所有这些配置都可以在Spring云中使用.但是要很难理解如何配置所有这些以获得有效的解决方案.
这是一个建议:
@HystrixCommand
@Retryable
public Object doSomething() {
// use your RestTemplate here
}
Run Code Online (Sandbox Code Playgroud)
但我不完全知道它是否会帮助我解决上面提到的所有细微之处.
我确实看到有一个@FeignClient.但是从这篇博客中我了解到它为HTTP客户端请求提供了高级功能.它是否有助于重试和断路器以及负载平衡一体机?
谢谢