7

spring-cloud-Eureka我想要支持的微服务应用程序中的以下功能。

1)负载平衡 - 如果我有 3 个节点用于一项服务,负载平衡应该发生在它们之间

2) 重试逻辑 - 如果其中一个节点没有响应,则应在回退到另一个节点之前重试一定次数(例如 3. 应该是可配置的)。

3) 断路器 - 如果由于某些原因,所有 3 个服务节点在访问数据库时出现问题并抛出异常或没有响应,则电路应该打开,调用回退方法,并且在服务恢复后电路自动关闭。

看了很多 Spring-cloud 的例子,我想通了

1)RestTemplate 将有助于选项 1。但是当 RestTemplate 访问一个服务实例并且如果节点失败时,它会尝试使用其他两个节点吗?

2) Hystix 将有助于断路器选项(以上 3)。但是如果只有一个节点没有响应,它会在打开电路并调用回退方法之前尝试其他节点。一旦服务恢复,它会自动关闭电路吗?

3)如何用spring-cloud获取retryLogic?我确实知道@Retryable注释。但它会在以下情况下有所帮助吗?一个节点重试 3 次,失败后,在断路器启动之前尝试下一个节点 3 次和最后一个节点 3 次。

我看到所有这些配置都在 spring cloud 中可用。但是很难理解如何配置所有这些以获得有效的解决方案。

这是一个建议:

@HystrixCommand
@Retryable
public Object doSomething() {
   // use your RestTemplate here
}

但我不完全知道它是否会帮助我解决我上面提到的所有微妙之处。

我确实看到有一个@FeignClient. 但是从这个博客中,我了解到它为 HTTP 客户端请求提供了高级功能。它有助于重试和断路器以及负载平衡多合一吗?

谢谢

4

1 回答 1

9

我确实看到有一个@FeignClient。它有助于重试和断路器以及负载平衡多合一吗?

如果您使用的是完整的 spring-cloud 堆栈,它实际上可以解决您提到的所有问题。

此场景中的 netflix 组件在 spring-cloud 中如下:

尤里卡 - 服务注册

让您动态注册您的服务,因此您只需要在您的应用程序(eureka)中修复一个主机。

功能区 - 负载均衡器

开箱即用,它为您提供循环负载平衡,但您可以实现自己的@RibbonClient(甚至针对特定服务)并设计自定义负载平衡,例如基于 eureka 元数据。负载平衡发生在客户端。

Feign - Http 客户端

有了@FeignClient您,您可以为您的其他服务(或基础架构之外的服务)快速开发客户端。它与功能区和尤里卡集成,因此您可以参考您的服务@FeignClient(yourServiceNameInEureka),最终得到的是一个客户端,它使用您的首选逻辑在注册实例之间进行负载平衡。如果您使用的是 spring,您可以使用熟悉的@RequestMapping注解来描述您正在使用的端点。

Hystrix - 断路器

默认情况下,您的 feign 客户端将使用 hystrix,每个请求都将包装在 hystrix 命令中。您当然可以手动创建 hytrix 命令并根据需要进行配置。

您必须进行一些配置才能使它们正常工作(实际上只是@Enable配置上的一些注释)。

我强烈建议阅读提供的 spring 文档,因为它以相当快的阅读速度涵盖了几乎所有方面。

http://cloud.spring.io/spring-cloud-netflix/spring-cloud-netflix.html

于 2015-09-08T18:09:59.420 回答