spring-cloud - Spring Cloud 断路器或 Hystrix

标签 spring-cloud hystrix circuit-breaker

Hystrix 主要适用于使用 Spring Cloud 构建的应用程序。 话虽如此,一个应用程序可能有多个服务层。

例如亚马逊(亚马逊网站必须具有登录、产品、购物车、订单、支付等多项服务)

客户端(例如 Web 用户)-> Web 应用程序 X -> 服务 A(它使用数据源 A)-> 服务 B(数据源 B)-> 服务 C(数据源 C)-> 服务 D (数据源D)->服务E(数据源E)

在这种情况下,当服务 E 发生故障时,如何将其导航回客户端? Hystrix 如何在这里有用以了解服务 E 中一项特定功能的不可用性?

如果这个例子是错误的,那么 Hystrix 范围是否仅限于一个服务内的多个进程,而不是一个应用程序中使用的多个服务? 话虽如此,上面的例子可以进行如下调整

客户端(例如 Web 用户)-> Web 应用程序 X -> 服务 A -> 服务 A 内部 假设有进程 1 -> 进程 2 -> 进程 3 -> 进程 4-> 进程 5 进程 5 中的任何失败都会导航回进程 1,然后返回客户端。

我的问题更多是关于维护线程状态。

对于每个服务,try-catch 线程范围是有限的(如果错误,请纠正我)。

Hystrix 如何在整个事务期间维护线程状态?

最佳答案

Hystrix is predominantly meant for applications built using spring cloud

不完全是。 Hystrix 通常用于启用断路器功能。它可以在任何地方使用。即使对于简单的方法调用 例如

class A {

    B b;

    public void methodA() {
               b.methodB();
    }
}


class A {

    DatabaseConnectionPool object;


    @HystrixCommand(fallbackMethod = "abcd")
    public void methodB() {
               // Get db object from pool. 
               // call db and fetch something.
    }
}

即使是简单的方法调用,也可以使用。 Hystrix 周围的代码内部所做的事情并不重要。 但通常我们在代码片段周围使用 Hystrix,这些代码片段会因未知原因抛出异常(尤其是在调用不同的应用程序时)

with this kind of scenario when something breaks in Service E, How that gets navigated back to client? How Hystrix can be useful here to know unavailability of one specific functionality in Service E?

如果您包装每个方法调用,即从服务 A --> 服务 B 和服务 B --> 服务 C 并进一步使用 Hystrix,那么每个调用都被视为一个电路,您可以使用 Hystrix-dashboard 进行可视化,什么是每个电路的状态(闭合、打开、半开)。 假设服务 B --> 服务 C 的调用失败(抛出异常),那么 Hystrix 会将原始异常包装在 Hystrix Exception 中并将其抛出。如果您有后备方法,那么它将转到服务 B 中的后备方法并返回后备中指定的值。如果您没有回退,那么它会在链的更高处抛出异常。同样的事情在链条的更高层重复发生。

How Hystrix maintains state of thread during this whole transaction ?

对于用 Hystrix 包装的每个调用,Hystrix 维护一个线程池,您可以完全配置它。

If I already have an existing Java feature of using try-catch why will someone go for Hystrix explicitly?

Hystrix 提供了更多的功能。你甚至无法将其与 try catch 进行比较。我建议您阅读断路器模式。

关于spring-cloud - Spring Cloud 断路器或 Hystrix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48528446/

相关文章:

java - 如何在 Spring 中将 Retryable 和 CircuitBreaker 结合在一起?

spring-cloud - Spring Cloud : Zuul Broken Pipe Error

hystrix - 使用 Netflix Feign 和 Hystrix 设置请求超时

apache-kafka - 当目标系统关闭时,停止 Spring Cloud Stream @StreamListener 监听

hystrix - 关闭 Hystrix 功能

azure - azure 中是否有断路器模式的 native 实现?

spring - 从托管在 GitHub 上的 Spring Cloud Config Server 访问的 repo 的身份验证问题

spring - 如何从 Actuator/metrics 端点中排除 Hystrix Metrics?

load-balancing - Spring Data REST 链接和 Ribbon 客户端负载均衡器

java - 使用 Hystrix 包装 SOAP 调用 (WebServiceGatewaySupport)