gpt4 book ai didi

spring-boot - Spring Cloud - 如何为分布式 Spring 应用程序获得重试、负载平衡和断路器的好处

转载 作者:行者123 更新时间:2023-12-04 14:26:15 26 4
gpt4 key购买 nike

我希望在 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 中使用。但是很难理解如何配置所有这些以获得有效的解决方案。

这是one建议的:

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

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

我确实看到有一个 @FeignClient .但从此 blog ,据我所知,它为 HTTP 客户端请求提供了高级功能。它是否有助于重试、断路器和负载平衡一体机?

谢谢

最佳答案

I do see there is a @FeignClient. Does it help with retry and circuit breaker and load balancing all-in-one?



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

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

Eureka - 服务注册

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

功能区 - 负载均衡器

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

Feign - Http客户端

@FeignClient您可以为您的其他服务(或基础设施之外的服务)快速开发客户端。它与 Ribbon 和 eureka 集成在一起,因此您可以引用您的服务 @FeignClient(yourServiceNameInEureka)你最终得到的是一个客户端,它使用你的首选逻辑在注册实例之间进行负载平衡。如果您使用的是 spring,则可以使用熟悉的 @RequestMapping用于描述您正在使用的端点的注释。

Hystrix - 断路器

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

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

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

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

关于spring-boot - Spring Cloud - 如何为分布式 Spring 应用程序获得重试、负载平衡和断路器的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31901054/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com