Spring Cloud断路器或Hystrix

时间:2018-01-30 18:44:35

标签: spring-cloud hystrix circuit-breaker

Hystrix主要用于使用spring cloud构建的应用程序。 已经说过,应用程序可能有多个服务层。

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

客户(说网络用户) - > Web应用程序X - >服务A(它使用数据源A) - >服务B(数据源B) - >服务C(数据源C) - >服务D(数据源D) - >服务E(数据来源E)

当这种情况发生在服务E中出现问题时,如何将其导航回客户端? Hystrix如何在此处了解服务E中某个特定功能的不可用性?

如果该示例有误,那么Hystrix范围是限于一个服务中的多个进程而不是一个应用程序中使用的多个服务? 话虽如此,上面的例子可以调整类似下面的内容

客户(说网络用户) - > Web应用程序X - >服务A - >内部服务A让我们说有流程,如流程1 - >流程2 - >流程3 - >流程4>流程5 并且过程5中的任何失败都会导航回过程1然后返回到客户端。

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

使用try-catch线程范围受限于每项服务(如果错误,请纠正我)。

Hystrix在整个交易过程中如何维护线程状态?

1 个答案:

答案 0 :(得分:2)

  

Hystrix主要用于使用弹簧构建的应用程序   云

不完全是。 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,这会因为未知原因而抛出异常(特别是在调用不同的应用程序时)

  

当这种情况发生在服务E中的某些内容时,如何   被导航回客户端? Hystrix如何在这里有用   知道服务E中某个特定功能不可用吗?

如果你打包每个方法电话,即来自服务A - >服务B和服务B - >服务C和Hystrix,然后每个呼叫被视为一个电路,你可以使用Hystrix仪表板可视化,每个电路的状态(闭合,开放,半开)。 让我们假设来自服务B的电话 - > Service C失败(抛出异常),然后Hystrix将原始异常包装在Hystrix Exception中并将其抛回。如果您有回退方法,那么它将转到服务B中的回退方法并返回回退中指定的值。如果你没有后备,那么它会将链接中的异常抛出。同样的事情在链条上重复。

  

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

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

  

如果我已经有使用try-catch的现有Java功能,为什么会这样做   有人明确地去了Hystrix吗?

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