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 或其他作为回退的内容。如果您需要通过网络调用外部服务,您应使用 FallbackViaNetwork ()
方法,该方法在使用自己的线程池的独立 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 提供默认值。
Name | 默认值 | 类型 | 描述 |
---|---|---|---|
|
| 布尔值 | 确定电路断路器是否用于跟踪健康和减少请求(如果其行程)。 |
|
| 整数 | 设置回路上或上方的错误百分比,电路应打开行行,启动对回退逻辑的请求。 |
|
| 布尔值 | 值 true 会强制断路器进入封闭状态,在其中允许请求,而不考虑错误百分比。 |
|
| 布尔值 | 值 true 会强制断路器进入可拒绝所有请求的开放(条状)状态。 |
|
| 整数 | 设置在滚动窗口中设置电路行程的最少请求数。 |
|
| 整数 | 设置电路到拒绝请求后的时间长度。在此时间过后,请求尝试可以决定电路是否应再次关闭。 |
| 节点 ID | 字符串 | 标识 Hystrix 命令。您不能配置这个选项。它始终是节点 ID 以使命令是唯一的。 |
|
| 整数 |
设置核心 thread-pool 大小。这是可以同时执行的 |
|
| 整数 |
设置 |
|
| 字符串 |
指出执行哪些隔离策略 |
|
| 布尔值 |
指明 |
|
| 整数 | 在执行完成时以毫秒为单位设置超时。 |
|
| 布尔值 |
指明是否应该执行 |
|
| 布尔值 |
决定在发生失败时是否尝试 |
|
| 整数 |
设置 |
|
| 字符串 | 标识用于关联统计数据和断路器属性的 Hystrix 组。 |
|
| 整数 | 设置 keep-alive 时间(以分钟为单位)。 |
|
| 整数 |
设置 |
|
| 整数 | 在允许拍摄健康快照之间,以毫秒为单位设置等待时间。健康快照计算成功和错误百分比,并影响断路器状态。 |
|
| 整数 | 设置每个存储桶保留的最大执行次数。如果在执行期间进行更多操作,它们将在存储桶的开头进行换行并开始写入。 |
|
| 布尔值 | 指明是否应该跟踪执行延迟。这个延迟的计算为百分比。值 false 会导致概述统计信息(mean, percentiles)返回为 -1。 |
|
| 整数 |
将 |
|
| 整数 | 设置滚动窗口的持续时间,以毫秒为单位保留执行时间以允许百分比计算。 |
|
| 整数 | 将滚动统计窗口的存储桶数量设置为. |
|
| 整数 |
此选项和以下选项适用于从 |
|
| 整数 |
设置队列大小 rejection 阈值 - 一个 artificial 的最大队列大小在那个有问题时,即使尚未达到 '{}' |
|
| 布尔值 |
指示 |
|
| 字符串 | 定义命令应该在其中运行的 thread-pool。默认情况下,使用与 group 键相同的密钥。 |
|
| 整数 | 将滚动统计窗口的存储桶数量设置为. |
|
| 整数 | 以毫秒为单位设定统计滚动窗口的持续时间。这是为线程池保留指标的时长。 |