Hystrix主要用于使用spring云构建的应用程序。话虽如此,一个应用程序可能有多个服务层。
例如Amazon (Amazon站点必须有多种服务,如登录、产品、手推车、订单、支付等)
客户端(如web用户) -> web应用程序X ->服务A(它使用数据源A) ->服务B(数据源B) ->服务C(数据源C) ->服务D(数据源D) ->服务E(数据源E)
在这种情况下,当某些东西在Service中中断时,如何导航回客户端?在这里,Hystrix如何帮助您了解服务E中某一特定功能的不可用性?
如果该示例是错误的,那么Hystrix作用域是否仅限于一个服务内的多个进程,而不是一个应用程序中使用的多个服务?话虽如此,上面的例子还是可以调整的,如下所示
客户端(如web用户) -> web应用程序X ->服务A服务内部的->让我们说存在像process 1 ->process 2 ->process 3 ->process 4->process 5之类的进程,流程5中的任何故障都会被导航回进程1,然后返回到客户端。
我的问题更多的是关于在这里维护线程状态。
在尝试-捕获线程范围是有限的每个服务(请纠正我,如果错)。
在整个事务期间,Hystrix是如何维护线程状态的?
发布于 2018-01-31 17:58:05
Hystrix主要用于使用spring云构建的应用程序。
不完全同意。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,这些代码将以未知的原因抛出异常(特别是在调用不同的应用程序时)。
在这种情况下,当某些东西在Service中中断时,如何导航回客户端?在这里,Hystrix如何帮助您了解服务E中某一特定功能的不可用性?
如果您包装每个方法调用,例如从服务A->服务B和服务B->服务C,再加上Hystrix,那么每个调用都被视为一个电路,您可以使用Hystrix-仪表板可视化每个电路的状态(关闭、打开、半开放)。让我们假设来自Service > Service的调用失败(抛出异常),那么Hystrix会将原始异常包装在Hystrix异常中,并将其抛回。如果有回退方法,则它将转到Service中的回退方法,并返回回退中指定的值。如果没有退路,那么它会将异常抛到更高的链上。同样的东西也会在链条上重复。
在整个事务期间,Hystrix是如何维护线程状态的?
对于每个用Hystrix包装的调用,Hystrix都维护一个线程池,您可以完全配置它。
如果我已经有了一个现有的Java特性,即使用try-catch,那么为什么会有人显式地使用Hystrix呢?
Hystrix提供了更多的功能。你甚至无法将它与尝试捕捉进行比较。我建议你看断路器的图案。
https://stackoverflow.com/questions/48528446
复制相似问题