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 提供默认值。
Name | 默认值 | 类型 | 描述 |
---|---|---|---|
|
| 布尔值 | 确定断路器是否用于跟踪健康以及短路请求(如果被行程)。 |
|
| 整数 | 设置在或上面的错误百分比,使电路应打开并启动对回退逻辑的短路请求。 |
|
| 布尔值 | 值 true 会强制断路器进入闭状态,其允许请求而不考虑错误百分比。 |
|
| 布尔值 | true 值强制断路器进入开放(往返)状态,其中拒绝所有请求。 |
|
| 整数 | 在滚动窗口中设置将遍历电路的最少请求数。 |
|
| 整数 | 设置在传输电路以拒绝请求后的时间长度。在这个时间过后,允许请求尝试确定电路是否应再次关闭。 |
| 节点 ID | 字符串 | 标识 Hystrix 命令。您不能配置这个选项。它始终是节点 ID,以使命令是唯一的。 |
|
| 整数 |
设置 core thread-pool 大小。这是可以同时执行的 |
|
| 整数 |
设置 |
|
| 字符串 |
指明执行哪些隔离策略 |
|
| 布尔值 |
指明 |
|
| 整数 | 设置执行完成的时间(以毫秒为单位)。 |
|
| 布尔值 |
指明是否执行 |
|
| 布尔值 |
决定在出现故障时还是拒绝时尝试调用 |
|
| 整数 |
设置 |
|
| 字符串 | 标识用于关联统计数据和断路器属性的 Hystrix 组。 |
|
| 整数 | 以分钟为单位设置 keep-alive 时间。 |
|
| 整数 |
设置 |
|
| 整数 | 设置允许执行健康快照之间等待的时间(以毫秒为单位)。健康快照计算成功和错误百分比,并影响断路器状态。 |
|
| 整数 | 设置每个存储桶保留的最大执行时间数。如果在期间发生更多的执行,它们将在存储桶的开头换行并启动过度写入。 |
|
| 布尔值 | 指明是否应跟踪执行延迟。延迟计算为百分比。值为 false 会导致摘要统计(百分比)返回为 -1。 |
|
| 整数 |
设置 |
|
| 整数 | 设置滚动窗口的持续时间,在其中保留执行时间,允许有百分比的计算(以毫秒为单位)。 |
|
| 整数 | 设置滚动统计窗口划分为的 bucket 数量。 |
|
| 整数 |
这个选项和以下选项适用于从 |
|
| 整数 |
设置队列大小 rejection 阈值 - 人工最大队列大小,即使 swig |
|
| 布尔值 |
指明 |
|
| 字符串 | 定义此命令应在哪个 thread-pool 中运行。默认情况下,这使用与组密钥相同的密钥。 |
|
| 整数 | 设置滚动统计窗口划分为的 bucket 数量。 |
|
| 整数 | 以毫秒为单位设置统计滚动窗口持续时间。这是线程池保留指标的时长。 |