我想在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 cloud中使用。但是要很难理解如何配置所有这些以实现有效的解决方案。
以下是one:
@HystrixCommand
@Retryable
public Object doSomething() {
// use your RestTemplate here
}
但我完全不知道它是否会帮助我解决上面提到的所有细微之处。
我确实看到有@FeignClient
。但是从这个blog,我知道它为HTTP客户端请求提供了高级功能。它是否有助于重试和断路器以及负载均衡一体机?
由于
答案 0 :(得分:8)
我确实看到有一个@FeignClient。它是否有助于重试和断路器以及负载均衡一体机?
如果您使用的是完整的Spring-cloud堆栈,它实际上可以解决您提到的所有问题。
此场景中的netflix组件在spring-cloud中如下:
Eureka - Service Registry
让你动态地注册你的服务,这样你只需要在你的应用程序中安装一个主机(尤里卡)。
功能区 - 负载均衡器
开箱即用它可以为您提供循环负载均衡,但您可以实现自己的@RibbonClient
(即使是针对特定服务)并根据eureka元数据设计自定义负载均衡。负载均衡发生在客户端。
Feign - Http客户端
使用@FeignClient
,您可以为您的其他服务(或基础架构之外的服务)快速开发客户端。它与功能区和尤里卡集成,因此您可以参考您的服务@FeignClient(yourServiceNameInEureka)
,最终得到的是一个客户端,它使用您首选的逻辑在已注册的实例之间进行负载均衡。如果您使用的是spring,则可以使用熟悉的@RequestMapping
注释来描述您正在使用的端点。
Hystrix - 断路器
默认情况下,假装客户端将使用hystrix,每个请求都将包含在hystrix命令中。您当然可以手动创建hytrix命令并根据需要进行配置。
你必须配置一点才能使你的工作正常工作(实际上你的配置上只有几个@Enable
注释)。
我强烈建议您阅读提供的spring文档,因为它可以快速阅读几乎所有方面。
http://cloud.spring.io/spring-cloud-netflix/spring-cloud-netflix.html