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,以便使命令是唯一的。 |
|
| 整数 |
设置核心 thread-pool 大小。这是可同时执行的最大 |
|
| 整数 |
在使用 |
|
| 字符串 |
指明通过哪个隔离策略 |
|
| 布尔值 |
指明在超时时是否应该中断 |
|
| 整数 | 为执行完成设置超时(毫秒)。 |
|
| 布尔值 |
指明是否应该有时间执行 |
|
| 布尔值 |
决定在出现故障时是否尝试调用 |
|
| 整数 |
设置 |
|
| 字符串 | 标识用于关联统计数据和断路器属性的 Hystrix 组。 |
|
| 整数 | 设置 keep-alive 时间(以分钟为单位)。 |
|
| 整数 |
设置 |
|
| 整数 | 设置允许执行健康快照之间等待的时间(以毫秒为单位)。健康快照计算成功和错误百分比,并影响断路器状态。 |
|
| 整数 | 设置每个存储桶保留的最大执行次数。如果在存储桶开始时发生更多的执行,它们将在存储桶开始时换行并开始覆盖。 |
|
| 布尔值 | 指明是否应跟踪执行延迟。延迟被计算为百分比。值 false 会导致摘要统计信息(mean, percentiles)返回为 -1。 |
|
| 整数 |
设置 |
|
| 整数 | 设置滚动窗口的持续时间,其中保留执行时间,以便以毫秒为单位计算百分比。 |
|
| 整数 | 设置滚动统计窗口划分为的 bucket 数量。 |
|
| 整数 |
这个选项和以下选项适用于从 |
|
| 整数 |
设置队列大小 rejection 阈值 - 即使还没有达到 netobserv |
|
| 布尔值 |
指明是否应该将 |
|
| 字符串 | 定义此命令应在哪个 thread-pool 中运行。默认情况下,它使用与 group 键相同的密钥。 |
|
| 整数 | 设置滚动统计窗口划分为的 bucket 数量。 |
|
| 整数 | 以毫秒为单位设置统计滚动窗口的持续时间。这是为线程池保留指标的时间。 |