问题标签 [circuit-breaker]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
581 浏览

c# - 对象未锁定时 Monitor.TryEnter 返回 false

我正在为我们的服务实施断路器。这是非常标准的断路器,除了它将所有动作包装在超时中,因此当发生太多超时时它也会断开电路。当断路器变为半开状态时,我正在使用MonitorTryEnter方法来确保只有一个线程执行操作(检查服务是否恢复)。请在下面找到代码片段(这是在半开状态下执行的代码):

编辑(粘贴整个功能代码)

正如您在上面的代码片段中看到的,TryEnter 被包裹在 Try/Finally 中,确保无论如何都会释放锁。我遇到的问题是,在某些时候Monitor.TryEnter,每次尝试都开始返回 false。我调试了代码,发现在它开始发生之前,每次Monitor.TryEnter调用都会Monitor.Exit被执行——这意味着锁应该被释放,但此时似乎并不是每个调用都返回 false。不知道这怎么可能。

是否有可能Monitor.Exit由于某种原因不释放锁(虽然它不会抛出任何异常)?或者我在这里做错了什么?

编辑。这就是 _halfOpenSyncObject 的声明方式(这个类只有一个实例)

编辑半开实现:

0 投票
1 回答
227 浏览

cxf - 不工作 - CXF 断路器功能的编程方法

根据文档 - https://cwiki.apache.org/confluence/display/CXF20DOC/JAX-RS+Failover#JAX-RSFailover-Code.1,我尝试运行以下代码以及相关配置,但是断路器一旦超过连接故障的阈值计数,机制就不会打开。由于电路保持关闭,调用尝试仍被接受,这与预期行为背道而驰。

}

}

包含堆栈跟踪的日志(在此处可用)。

经过大量调试,我了解到连接失败的计数器永远不会超过阈值限制,因为数据的状态(包括计数器)特定于每个 WebClient 对象,为每个调用实例化。我假设如果在多个失败的调用中使用相同的 WebClient 实例,那么计数器将被更新并最终打开电路。有关详细信息,请参阅随附的屏幕截图

我想就我的理解是否正确获得第二意见。

0 投票
1 回答
1622 浏览

spring - 与反应通量一起使用的 Resilience4j 断路器永远不会在错误时变为 OPEN

我正在评估resilience4j 以将其包含在我们的反应式API 中,到目前为止我使用的是模拟通量。

下面的服务总是失败,因为我想测试电路是否因多个错误而打开:

这是使用存储库的处理程序,打印电路的状态:

我多次调用 API 端点,总是得到这个堆栈跟踪:

如您所见,电路始终处于关闭状态。我不知道它是否有任何关系,但请注意此消息No Consumers: Event ERROR not published

为什么这不起作用?


0 投票
1 回答
3828 浏览

project-reactor - 弹性4j如何在Spring webflux应用程序中使用断路器时处理错误

现在,当电路打开时,连接只是保持打开状态而没有响应。

如果我停止服务器,浏览器会显示:

我想知道如何:

1)解决连接挂起的问题。

2)返回一些东西作为后备。例如一个空的通量。

日志:

调用序列,最后一个,当电路打开时,永远等待:

0 投票
1 回答
169 浏览

spring-cloud-netflix - 如何停止现有的请求执行以停止并在 hystrix 中运行回退方法

在 hystrix 中,我使用execution.isolation.thread.timeoutInMilliseconds此配置来限制特定时间的响应,否则使用回退方法,但此设置也在执行后端调用的请求。是否也可以停止它?

0 投票
2 回答
1408 浏览

javascript - 在nodejs中使用断路器(负鼠)请求缓存

基于 Netflix Hystrix 断路器设计模式,我尝试执行以下操作:

我部署了 3 个节点 js 服务。他们使用断路器(负鼠)在它们之间进行 REST 调用。我有一个后备方法来处理服务出现故障时的情况。我想知道是否可以在断路器旁边使用请求缓存之类的东西来在调用回退时返回缓存的响应。如果是,我怎样才能做到这一点?

PS:请求是我的客户进行 REST 调用

0 投票
1 回答
730 浏览

java - Hystrix 断路器在 Spring Micro 服务实现中触发事件

有没有一种方法可以识别 Hystrix 何时从电路开路状态转变为半开路状态(在睡眠时间间隔之后)。当这种状态改变发生时,Hystrix 可以触发事件吗?任何 Hystrix 属性都可以告诉我们这一点吗?如果它可以触发事件,请告诉方法。任何代码示例也会有所帮助。

谢谢,尼基尔

0 投票
1 回答
1244 浏览

java - 在请求线程中运行的 Java 断路器

我一直在考虑 Netflix OSS 断路器解决方案——Hystrix。

一切听起来都不错,但我认为让命令在不同的线程中运行在我的用例场景中没有意义。

这是因为我的请求处理程序完成的工作在调用远程服务之前只需要很少的计算。此外,在等待回复时我无能为力。

伪代码示例:

@post("/token") token(@body authResult){ Validate authResult Get id from authResult 调用远程服务获取authz token 返回authz token }

我想使用 hystrix 进行远程调用,但我认为在单独的线程中执行命令没有意义,因为无论如何我都会被阻止。

有什么建议么?是否可以在与调用者相同的线程中运行 hystrix 命令?

0 投票
1 回答
740 浏览

java - Hystrix CircuitBreakerSleepWindowInMilliseconds 无法按预期工作

我正在测试 Hystrix 断路器的实现。这是命令类的样子:

命令是这样调用的:

在测试中,我执行以下步骤:

我对给定命令的配置的期望: MyExternalService.callMethod() 应该被调用 10 次(RequestVolumeThreshold),之后不被调用 100000 毫秒(长时间)。在我的测试用例中,我希望 CommandOne.runCount = 10。但实际上我收到了 150 到 200 次 MyExternalService.callMethod() 调用(CommandOne.runCount = (150-200)。为什么会发生这种情况?我做错了什么?

0 投票
1 回答
556 浏览

spring-boot - 使用 hystrix 命令包装 spring 集成出站网关调用

我想使用 hystrix 命令在我的集成应用程序中包装对出站网关的调用,类似于它在 Spring Boot 应用程序中的可用方式。

我有如上所述的出站网关。

对于目标应用程序经常停机/无响应的场景,我需要这个,我们正在寻找一种在这些场景中提供模拟响应并为目标应用程序恢复提供机会的方法。

基本上,我想在这里使用hystrix 命令并模拟断路器模式

我觉得结合使用 ExpressionEvaluatingRequestHandlerAdvice 和 RequestHandlerCircuitBreakerAdvice 可能会有所帮助,但我没有找到任何文档如何将它们一起用于我的场景。

使用 Spring Boot 似乎更简单,但使用集成我发现不清楚。

如果有人通过向出站网关添加自定义行为来实现类似的行为,请告诉我们。

更新:

根据建议我做了如下,

将 @EnableCircuitBreaker 注释添加到我的 Spring 引导应用程序类。

此外,在我的网关接口中添加了@HystrixCommand 注释,如下所示,

我在接口本身中添加了方法,因为 java 8 支持接口中的默认方法。

我什至尝试在接口中使用静态方法,如下所示。

我使用了 Spring Boot 1.5.12 和 Spring cloud Edgware.SR3版本。我还在我的应用程序 pom.xml 中添加了spring-cloud-starter-hystrix和 s pring-cloud-starter-eureka依赖项。

不确定 @hystrix 注释是否似乎可以解决问题。