我希望在spring-cloud-Eureka支持的微服务应用程序中提供以下特性。
1)负载平衡--如果一个服务有3个节点,它们之间就应该进行负载平衡。
2)重试逻辑--如果其中一个节点没有响应,那么在返回到另一个节点之前,应该对一定数量的节点进行重试(例如: 3.应该是可配置的)。
(3)断路器--如果由于某种原因,所有3个业务节点都存在访问db和抛出异常或未响应的问题,则在业务恢复后,电路应打开、退出方法调用和电路自动关闭。
看了很多Spring云的例子,我发现
1) RestTemplate将在选项1方面有所帮助。但是,当RestTemplate访问一个服务实例时,如果节点失败,它会尝试其他两个节点吗?
2) Hystix将有助于断路器选项(以上3)。但是,如果只有一个节点没有响应,它会在打开电路和调用回退方法之前尝试其他节点吗?一旦服务恢复,它会自动关闭电路吗?
3)如何利用春云获取retryLogic?我确实知道@Retryable注释。但是,在以下情况下,它会有帮助吗?用一个节点重试3次,失败后,在断路器启动之前,尝试下一个节点3次,最后一个节点3次。
我看到所有这些配置都可以在春云中使用。但很难理解如何为所有这些有效的解决方案进行配置。
以下是一提出的建议:
@HystrixCommand
@Retryable
public Object doSomething() {
// use your RestTemplate here
}但我不完全知道这是否能帮助我解决我上面提到的所有微妙之处。
我确实看到有一个@FeignClient。但是,从这个博客中,我了解到它为HTTP请求提供了一个高级特性。它是否有助于重试和断路器和负载平衡的所有一体?
谢谢
发布于 2015-09-08 18:09:59
我确实看到了一个@FeignClient。它是否有助于重试和断路器和负载平衡的所有一体?
如果您使用的是完整的spring云堆栈,它实际上解决了您提到的所有问题。
此场景中的netflix组件在spring中如下所示:
Eureka -服务注册中心
让我们动态注册您的服务,这样您只需要修复应用程序中的一个主机(eureka)。
丝带负载平衡器
它可以为您提供循环的负载平衡,但是您可以实现自己的@RibbonClient (即使是特定的服务),并设计您的自定义负载平衡(例如,基于eureka元数据)。负载平衡发生在客户端。
冒充- Http客户端
使用@FeignClient,您可以快速地为您开发其他服务(或基础设施之外的服务)。它与丝带和eureka集成在一起,因此您可以引用您的服务@FeignClient(yourServiceNameInEureka),您最终得到的是一个客户机,它使用首选逻辑在注册的实例之间进行负载平衡。如果使用spring,则可以使用熟悉的@RequestMapping注释来描述所使用的端点。
型高压断路器
默认情况下,假装客户端将使用hystrix,每个请求都将被包装在hystrix命令中。当然,您可以手工创建hytrix命令,并根据您的需要配置它们。
您必须配置一些才能使这些系统正常工作(实际上,您的配置上只需要几个@Enable注释)。
我强烈建议阅读所提供的spring文档,因为它以相当快的速度完成了您的几乎所有方面。
http://cloud.spring.io/spring-cloud-netflix/spring-cloud-netflix.html
https://stackoverflow.com/questions/31901054
复制相似问题