8.11. Hystrix
概述
由 Camel 2.18 提供。
Hystrix 模式可让应用程序与 Netflix Hystrix 集成,这可以在 Camel 路由中提供断路器。Hystrix 是一个延迟和容错库,旨在
- 隔离对远程系统、服务和第三方库的访问点
- 停止级联失败
- 在复杂的分布式系统中启用弹性,其中故障不可避免
如果您使用 maven,请在 pom.xml
文件中添加以下依赖项以使用 Hystrix:
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-hystrix</artifactId> <version>x.x.x</version> <!-- Specify the same version as your Camel core version. --> </dependency>
Java DSL 示例
以下是一个示例路由,它演示了 Hystrix 端点,通过回退到行的回退路由来防止运行缓慢。默认情况下,超时请求只是 1000ms
,因此 HTTP 端点必须相当快速成功。
from("direct:start") .hystrix() .to("http://fooservice.com/slow") .onFallback() .transform().constant("Fallback message") .end() .to("mock:result");
XML 配置示例
以下是相同的示例,但在 XML 中:
<camelContext xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:start"/> <hystrix> <to uri="http://fooservice.com/slow"/> <onFallback> <transform> <constant>Fallback message</constant> </transform> </onFallback> </hystrix> <to uri="mock:result"/> </route> </camelContext>
使用 Hystrix 回退功能
onFallback()
方法用于本地处理,您可以转换消息或调用 bean 或其他内容作为回退。如果您需要通过网络调用外部服务,那么您应该使用 onFallbackViaNetwork()
方法,它在使用其自己的线程池的独立 HystrixCommand
对象中运行,使它不会耗尽第一个命令对象。
Hystrix 配置示例
Hystrix 有许多选项,如下一节中所述。以下示例显示,用于将执行超时设置为 5 秒的 Java DSL,而不是默认的 1 秒,并让断路器等待 10 秒,而不是 5 秒(默认),在状态停止打开前再次尝试请求。
from("direct:start") .hystrix() .hystrixConfiguration() .executionTimeoutInMilliseconds(5000).circuitBreakerSleepWindowInMilliseconds(10000) .end() .to("http://fooservice.com/slow") .onFallback() .transform().constant("Fallback message") .end() .to("mock:result");
以下是相同的示例,但在 XML 中:
<camelContext xmlns="http://camel.apache.org/schema/spring"> <camelContext xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:start"/> <hystrix> <hystrixConfiguration executionTimeoutInMilliseconds="5000" circuitBreakerSleepWindowInMilliseconds="10000"/> <to uri="http://fooservice.com/slow"/> <onFallback> <transform> <constant>Fallback message</constant> </transform> </onFallback> </hystrix> <to uri="mock:result"/> </route> </camelContext>
You can also configure Hystrix globally and then refer to that configuration. For example:
<camelContext xmlns="http://camel.apache.org/schema/spring"> <!-- This is a shared config that you can refer to from all Hystrix patterns. --> <hystrixConfiguration id="sharedConfig" executionTimeoutInMilliseconds="5000" circuitBreakerSleepWindowInMilliseconds="10000"/> <route> <from uri="direct:start"/> <hystrix hystrixConfigurationRef="sharedConfig"> <to uri="http://fooservice.com/slow"/> <onFallback> <transform> <constant>Fallback message</constant> </transform> </onFallback> </hystrix> <to uri="mock:result"/> </route> </camelContext>
选项
ths Hystrix 组件支持以下选项:Hystrix 提供默认值。
名称 | 默认值 | 类型 | 描述 |
---|---|---|---|
|
| 布尔值 | 决定断路器是否用于跟踪健康和短路请求(如果它出差)。 |
|
| 整数 | 设置在 或以上处的错误百分比,电路应开路并启动短路到回退逻辑。 |
|
| 布尔值 | 值 true 会强制断路器进入闭路状态,而无论错误百分比如何,它都允许请求请求。 |
|
| 布尔值 | 值 true 会强制断路器进入 open(出)状态,在其中拒绝所有请求。 |
|
| 整数 | 设置出电路在滚动窗口中的最小请求数。 |
|
| 整数 | 设置断路器以拒绝请求的时间。在此时间过后,允许请求尝试来确定电路是否应该再次关闭。 |
| 节点 ID | 字符串 | 标识 Hystrix 命令。您无法配置这个选项。它始终是节点 ID,以使命令唯一。 |
|
| 整数 |
设置核心 thread-pool 大小。这是可以同时执行的最大 |
|
| 整数 |
在使用 |
|
| 字符串 |
指示通过以下哪个隔离策略 |
|
| 布尔值 |
指明在超时发生时是否应该中断 |
|
| 整数 | 为执行完成设置超时(以毫秒为单位)。 |
|
| 布尔值 |
指明是否应该 timed |
|
| 布尔值 |
决定在发生故障或拒绝时是否尝试调用 |
|
| 整数 |
设置 |
|
| 字符串 | 标识正在用来关联统计数据和断路器属性的 Hystrix 组。 |
|
| 整数 | 以分钟为单位设置 keep-alive 时间。 |
|
| 整数 |
设置 |
|
| 整数 | 在允许执行运行状况快照之间设置要等待的时间(以毫秒为单位)。健康快照计算成功和错误百分比,并影响断路器状态。 |
|
| 整数 | 设置每个存储桶保留的最大执行时间。如果在这段时间内进行更多执行,它们将换行,并在存储桶开始时进行覆盖。 |
|
| 布尔值 | 指明是否应该跟踪执行延迟。延迟计算为百分比。值 false 会导致概述统计(mean,百分比数)返回为 -1。 |
|
| 整数 |
设置 |
|
| 整数 | 设置执行时间的滚动窗口的持续时间,以便允许达到 50% 的计算时间(以毫秒为单位)。 |
|
| 整数 | 设置滚动统计窗口的存储桶数量被分成. |
|
| 整数 |
这个选项和以下选项适用于从 |
|
| 整数 |
设定队列大小拒绝阈值 - 智能的最大队列大小,即使尚未达到 |
|
| 布尔值 |
指明 |
|
| 字符串 | 定义此命令应在其中运行的 thread-pool。默认情况下,这使用与 group 键相同的密钥。 |
|
| 整数 | 设置滚动统计窗口的存储桶数量被分成. |
|
| 整数 | 设置统计滚动窗口的持续时间,以毫秒为单位。这是为线程池保留指标的时长。 |