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默认值类型描述

circuitBreakerEnabled

true

布尔值

确定电路断路器是否用于跟踪健康和减少请求(如果其行程)。

circuitBreakerErrorThresholdPercentage

50

整数

设置回路上或上方的错误百分比,电路应打开行行,启动对回退逻辑的请求。

circuitBreakerForceClosed

false

布尔值

值 true 会强制断路器进入封闭状态,在其中允许请求,而不考虑错误百分比。

circuitBreakerForceOpen

false

布尔值

值 true 会强制断路器进入可拒绝所有请求的开放(条状)状态。

circuitBreakerRequestVolumeThreshold

20

整数

设置在滚动窗口中设置电路行程的最少请求数。

circuitBreakerSleepWindownInMilliseconds

5000

整数

设置电路到拒绝请求后的时间长度。在此时间过后,请求尝试可以决定电路是否应再次关闭。

commandKey

节点 ID

字符串

标识 Hystrix 命令。您不能配置这个选项。它始终是节点 ID 以使命令是唯一的。

corePoolSize

10

整数

设置核心 thread-pool 大小。这是可以同时执行的 HystrixCommand 对象的最大数量。

executionIsolationSemaphoreMaxConcurrentRequests

10

整数

设置 HystrixCommand.run () 方法在使用 ExecutionIsolationStrategy.SEMAPHORE 时可以进行的最大请求数。

executionIsolationStrategy

线程

字符串

指出执行哪些隔离策略 HystrixCommand.run ()THREAD 在单独的线程上执行,并发请求受 thread-pool 中的线程数限制。SEMAPHORE 在调用线程和并发请求上执行,由 semaphore 数量限制:

executionIsolationThreadInterruptOnTimeout

true

布尔值

指明 HystrixCommand.run () 执行是否应在超时时中断。

executionTimeoutInMilliseconds

1000

整数

在执行完成时以毫秒为单位设置超时。

executionTimeoutEnabled

true

布尔值

指明是否应该执行 HystrixCommand.run ()

fallbackEnabled

true

布尔值

决定在发生失败时是否尝试 HystrixCommand.getFallback () 调用。

fallbackIsolationSemaphoreMaxConcurrentRequests

10

整数

设置 HystrixCommand.getFallback () 方法可从调用线程中获取的最大请求数。

groupKey

CamelHystrix

字符串

标识用于关联统计数据和断路器属性的 Hystrix 组。

keepAliveTime

1

整数

设置 keep-alive 时间(以分钟为单位)。

maxQueueSize

-1

整数

设置 BlockingQueue 实施的最大队列大小。

metricsHealthSnapshotIntervalInMilliseconds

500

整数

在允许拍摄健康快照之间,以毫秒为单位设置等待时间。健康快照计算成功和错误百分比,并影响断路器状态。

metricsRollingPercentileBucketSize

100

整数

设置每个存储桶保留的最大执行次数。如果在执行期间进行更多操作,它们将在存储桶的开头进行换行并开始写入。

metricsRollingPercentileEnabled

true

布尔值

指明是否应该跟踪执行延迟。这个延迟的计算为百分比。值 false 会导致概述统计信息(mean, percentiles)返回为 -1。

metricsRollingPercentileWindowBuckets

6

整数

rollingPercentile 窗口的存储桶数量设置为.

metricsRollingPercentileWindowInMilliseconds

60000

整数

设置滚动窗口的持续时间,以毫秒为单位保留执行时间以允许百分比计算。

metricsRollingStatisticalWindowBuckets

10

整数

将滚动统计窗口的存储桶数量设置为.

metricsRollingStatisticalWindowInMilliseconds

10000

整数

此选项和以下选项适用于从 HystrixCommandHystrixObservableCommand 执行捕获指标。

queueSizeRejectionThreshold

5

整数

设置队列大小 rejection 阈值 - 一个 artificial 的最大队列大小在那个有问题时,即使尚未达到 '{}'maxQueueSize

requestLogEnabled

true

布尔值

指示 HystrixCommand execution 和 events 应该记录到 HystrixRequestLog

threadPoolKey

null

字符串

定义命令应该在其中运行的 thread-pool。默认情况下,使用与 group 键相同的密钥。

threadPoolMetricsRollingStatisticalWindowBucket

10

整数

将滚动统计窗口的存储桶数量设置为.

threadPoolMetricsRollingStatisticalWindowInMilliseconds

10000

整数

以毫秒为单位设定统计滚动窗口的持续时间。这是为线程池保留指标的时长。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.