Spring 云断路器或 Hystrix

Spring Cloud Circuit Breakers or Hystrix

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

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

客户端(比如网络用户)-> 网络应用程序 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 中的回退方法和 returns 在回退中指定的值。如果您没有回退,那么它会在链的上游抛出异常。同样的事情在链条的上游重复。

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 相提并论。我建议你阅读断路器模式。