Hystrix断路器配置属性解析

HystrixCommand


配置方式

我们的配置都是基于 HystrixCommand 的,我们通过在方法上添加 @HystrixCommand 注解并配置注解的参数来实现配置,但有的时候一个类里面会有多个 Hystrix 方法,每个方法都是类似配置的话会冗余很多代码,这时候我们可以在类上使用 @DefaultProperties 注解来给整个类的 Hystrix 方法设置一个默认值。

配置项

下面是 HystrixCommand 支持的参数,除了 commandKey/observableExecutionMode/fallbackMethod 外,都可以使用 @DefaultProperties 配置默认值。

  • commandKey:用来标识一个 Hystrix 命令,默认会取被注解的方法名。需要注意:Hystrix 里同一个键的唯一标识并不包括 groupKey,建议取一个独一二无的名字,防止多个方法之间因为键重复而互相影响。
  • groupKey:一组 Hystrix 命令的集合, 用来统计、报告,默认取类名,可不配置。
  • threadPoolKey:用来标识一个线程池,如果没设置的话会取 groupKey,很多情况下都是同一个类内的方法在共用同一个线程池,如果两个共用同一线程池的方法上配置了同样的属性,在第一个方法被执行后线程池的属性就固定了,所以属性会以第一个被执行的方法上的配置为准。
  • commandProperties:与此命令相关的属性。
  • threadPoolProperties:与线程池相关的属性,
  • observableExecutionMode:当 Hystrix 命令被包装成 RxJava 的 Observer 异步执行时,此配置指定了 Observable 被执行的模式,默认是 ObservableExecutionMode.EAGER,Observable 会在被创建后立刻执行,而 ObservableExecutionMode.EAGER模式下,则会产生一个 Observable 被 subscribe 后执行。我们常见的命令都是同步执行的,此配置项可以不配置。
  • ignoreExceptions:默认 Hystrix 在执行方法时捕获到异常时执行回退,并统计失败率以修改熔断器的状态,而被忽略的异常则会直接抛到外层,不会执行回退方法,也不会影响熔断器的状态。
  • raiseHystrixExceptions:当配置项包括 HystrixRuntimeException 时,所有的未被忽略的异常都会被包装成 HystrixRuntimeException,配置其他种类的异常好像并没有什么影响。
  • fallbackMethod:方法执行时熔断、错误、超时时会执行的回退方法,需要保持此方法与 Hystrix 方法的签名和返回值一致。
  • defaultFallback:默认回退方法,当配置 fallbackMethod 项时此项没有意义,另外,默认回退方法不能有参数,返回值要与 Hystrix方法的返回值相同。

commandProperties


配置方式

Hystrix 的命令属性是由 @HystrixProperty 注解数组构成的,HystrixProperty 由 name 和 value 两个属性,数据类型都是字符串。

以下将所有的命令属性分组来介绍。

线程隔离(Isolation)

  • execution.isolation.strategy: 配置请求隔离的方式,有 threadPool(线程池,默认)和 semaphore(信号量)两种,信号量方式高效但配置不灵活,我们一般采用 Java 里常用的线程池方式。
  • execution.timeout.enabled:是否给方法执行设置超时,默认为 true。
  • execution.isolation.thread.timeoutInMilliseconds:方法执行超时时间,默认值是 1000,即 1秒,此值根据业务场景配置。
  • execution.isolation.thread.interruptOnTimeout: execution.isolation.thread.interruptOnCancel:是否在方法执行超时/被取消时中断方法。需要注意在 JVM 中我们无法强制中断一个线程,如果 Hystrix 方法里没有处理中断信号的逻辑,那么中断会被忽略。
  • execution.isolation.semaphore.maxConcurrentRequests:默认值是 10,此配置项要在 execution.isolation.strategy 配置为 semaphore 时才会生效,它指定了一个 Hystrix 方法使用信号量隔离时的最大并发数,超过此并发数的请求会被拒绝。信号量隔离的配置就这么一个,也是前文说信号量隔离配置不灵活的原因。

统计器(Metrics)

滑动窗口: Hystrix 的统计器是由滑动窗口来实现的,我们可以这么来理解滑动窗口:一位乘客坐在正在行驶的列车的靠窗座位上,列车行驶的公路两侧种着一排挺拔的白杨树,随着列车的前进,路边的白杨树迅速从窗口滑过,我们用每棵树来代表一个请求,用列车的行驶代表时间的流逝,那么,列车上的这个窗口就是一个典型的滑动窗口,这个乘客能通过窗口看到的白杨树就是 Hystrix 要统计的数据。

: bucket 是 Hystrix 统计滑动窗口数据时的最小单位。同样类比列车窗口,在列车速度非常快时,如果每掠过一棵树就统计一次窗口内树的数据,显然开销非常大,如果乘客将窗口分成十分,列车前进行时每掠过窗口的十分之一就统计一次数据,开销就完全可以接受了。 Hystrix 的 bucket (桶)也就是窗口 N分之一 的概念。

  • metrics.rollingStats.timeInMilliseconds:此配置项指定了窗口的大小,单位是 ms,默认值是 1000,即一个滑动窗口默认统计的是 1s 内的请求数据。
  • metrics.healthSnapshot.intervalInMilliseconds:它指定了健康数据统计器(影响 Hystrix 熔断)中每个桶的大小,默认是 500ms,在进行统计时,Hystrix 通过 metrics.rollingStats.timeInMilliseconds / metrics.healthSnapshot.intervalInMilliseconds 计算出桶数,在窗口滑动时,每滑过一个桶的时间间隔时就统计一次当前窗口内请求的失败率。
  • metrics.rollingStats.numBuckets:Hystrix 会将命令执行的结果类型都统计汇总到一块,给上层应用使用或生成统计图表,此配置项即指定了,生成统计数据流时滑动窗口应该拆分的桶数。此配置项最易跟上面的 metrics.healthSnapshot.intervalInMilliseconds 搞混,认为此项影响健康数据流的桶数。 此项默认是 10,并且需要保持此值能被 metrics.rollingStats.timeInMilliseconds 整除。
  • metrics.rollingPercentile.enabled:是否统计方法响应时间百分比,默认为 true 时,Hystrix 会统计方法执行的 1%,10%,50%,90%,99% 等比例请求的平均耗时用以生成统计图表。
  • metrics.rollingPercentile.timeInMilliseconds:统计响应时间百分比时的窗口大小,默认为 60000,即一分钟。
  • metrics.rollingPercentile.numBuckets:统计响应时间百分比时滑动窗口要划分的桶用,默认为6,需要保持能被metrics.rollingPercentile.timeInMilliseconds 整除。
  • metrics.rollingPercentile.bucketSize:统计响应时间百分比时,每个滑动窗口的桶内要保留的请求数,桶内的请求超出这个值后,会覆盖最前面保存的数据。默认值为 100,在统计响应百分比配置全为默认的情况下,每个桶的时间长度为 10s = 60000ms / 6,但这 10s 内只保留最近的 100 条请求的数据。

熔断器(Circuit Breaker)

  • circuitBreaker.enabled:是否启用熔断器,默认为 true;
  • circuitBreaker.forceOpen: circuitBreaker.forceClosed:是否强制启用/关闭熔断器,强制启用关闭都想不到什么应用的场景,保持默认值,不配置即可。
  • circuitBreaker.requestVolumeThreshold:启用熔断器功能窗口时间内的最小请求数。试想如果没有这么一个限制,我们配置了 50% 的请求失败会打开熔断器,窗口时间内只有 3 条请求,恰巧两条都失败了,那么熔断器就被打开了,5s 内的请求都被快速失败。此配置项的值需要根据接口的 QPS 进行计算,值太小会有误打开熔断器的可能,值太大超出了时间窗口内的总请求数,则熔断永远也不会被触发。建议设置为 QPS * 窗口秒数 * 60%
  • circuitBreaker.errorThresholdPercentage:在通过滑动窗口获取到当前时间段内 Hystrix 方法执行的失败率后,就需要根据此配置来判断是否要将熔断器打开了。 此配置项默认值是 50,即窗口时间内超过 50% 的请求失败后会打开熔断器将后续请求快速失败。
  • circuitBreaker.sleepWindowInMilliseconds:熔断器打开后,所有的请求都会快速失败,但何时服务恢复正常就是下一个要面对的问题。熔断器打开时,Hystrix 会在经过一段时间后就放行一条请求,如果这条请求执行成功了,说明此时服务很可能已经恢复了正常,那么会将熔断器关闭,如果此请求执行失败,则认为服务依然不可用,熔断器继续保持打开状态。此配置项指定了熔断器打开后经过多长时间允许一次请求尝试执行,默认值是 5000。

其他(Context/Fallback)

  • requestCache.enabled:是否启用请求结果缓存。默认是 true,但它并不意味着我们的每个请求都会被缓存。缓存请求结果和从缓存中获取结果都需要我们配置 cacheKey,并且在方法上使用 @CacheResult 注解声明一个缓存上下文。
  • requestLog.enabled:是否启用请求日志,默认为 true。
  • fallback.enabled:是否启用方法回退,默认为 true 即可。
  • fallback.isolation.semaphore.maxConcurrentRequests:回退方法执行时的最大并发数,默认是10,如果大量请求的回退方法被执行时,超出此并发数的请求会抛出 REJECTED_SEMAPHORE_FALLBACK 异常。

threadPoolProperties


配置方式

线程池的配置也是由 HystrixProperty 数组构成,配置方式与命令属性一致。

配置项

  • coreSize:核心线程池的大小,默认值是 10,一般根据 QPS * 99% cost + redundancy count 计算得出。
  • allowMaximumSizeToDivergeFromCoreSize:是否允许线程池扩展到最大线程池数量,默认为 false;
  • maximumSize:线程池中线程的最大数量,默认值是 10,此配置项单独配置时并不会生效,需要启用 allowMaximumSizeToDivergeFromCoreSize 项。
  • maxQueueSize:作业队列的最大值,默认值为 -1,设置为此值时,队列会使用 SynchronousQueue,此时其 size 为0,Hystrix 不会向队列内存放作业。如果此值设置为一个正的 int 型,队列会使用一个固定 size 的 LinkedBlockingQueue,此时在核心线程池内的线程都在忙碌时,会将作业暂时存放在此队列内,但超出此队列的请求依然会被拒绝。
  • queueSizeRejectionThreshold:由于 maxQueueSize 值在线程池被创建后就固定了大小,如果需要动态修改队列长度的话可以设置此值,即使队列未满,队列内作业达到此值时同样会拒绝请求。此值默认是 5,所以有时候只设置了 maxQueueSize 也不会起作用。
  • keepAliveTimeMinutes:由上面的 maximumSize,我们知道,线程池内核心线程数目都在忙碌,再有新的请求到达时,线程池容量可以被扩充为到最大数量,等到线程池空闲后,多于核心数量的线程还会被回收,此值指定了线程被回收前的存活时间,默认为 2,即两分钟。

工作方式

Hystrix 内线程池的使用是基于 Java 内置线程池的简单包装,通常有以下三种状态:

  • 如果请求量少,达不到 coreSize,通常会使用核心线程来执行任务。
  • 如果设置了 maxQueueSize,当请求数超过了 coreSize, 通常会把请求放到 queue 里,待核心线程有空闲时消费。
  • 如果 queue 长度无法存储请求,则会创建新线程执行直到达到 maximumSize 最大线程数,多出核心线程数的线程会在空闲时回收。

Hystrix常量配置类

package com.ley.springcloud.hystrix.utils;

import com.netflix.hystrix.HystrixCommand;

/**
 * HystrixCommand配置常量Key
 *
 * @see com.netflix.hystrix.HystrixCommandProperties
 * @see com.netflix.hystrix.HystrixThreadPoolProperties
 * @see com.netflix.hystrix.HystrixCollapserProperties
 **/
public final class HystrixCommandConfigConstants {

    //Command properties is use to control HystrixCommand

    /**
     * <b>execution 配置控制HystrixCommand.run的执行</b>
     *
     * @see HystrixCommand#run()
     * @see com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand#commandProperties()
     * @see com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty
     **/
    public static class ExecutionIsolationConstants {

        /**
         * 配置HystrixCommand.run的执行策略: THREAD|SEMAPHORE
         **/
        public static final String EXECUTION_ISOLATION_STRATEGY = "execution.isolation.strategy";

        /**
         * 配置HystrixCommand执行超时时间: 默认1000ms
         **/
        public static final String EXECUTION_ISOLATION_THREAD_TIMEOUT_IN_MILLISECONDS = "execution.isolation.thread.timeoutInMilliseconds";

        /**
         * 配置HystrixCommand.run执行是否启用超时时间: 默认为true
         **/
        public static final String EXECUTION_TIMEOUT_ENABLED = "execution.timeout.enabled";

        /**
         * 配置HystrixCommand.run()执行被取消的时候是否将它中断: 默认为true
         **/
        public static final String EXECUTION_ISOLATION_THREAD_INTERRUPT_ON_TIMEOUT = "execution.isolation.thread.interruptOnTimeout";

        /**
         * 当HystrixCommand的隔离策略使用信号量的时候,该属性用来配置信号量的大小(并发请求数),<br/>
         * 当最大并发请求数达到该设置值,后续的请求将被拒绝: 默认10
         **/
        public static final String EXECUTION_ISOLATION_SEMAPHORE_MAX_CONCURRENT_REQUESTS = "execution.isolation.semaphore.maxConcurrentRequests";
    }

    /**
     * fallback 控制HystrixCommand.getFallback()执行对于线程池或者信号量执行策略都生效
     *
     * @see HystrixCommand#getFallback()
     * @see com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand#commandProperties()
     * @see com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty
     **/
    public static class FallbackConstants {

        /**
         * 配置从调用线程中允许HystrixCommand.getFallback()方法的最大执行请求数<br/>
         * 当达到最大并发请求数时,后续请求将被拒绝并抛出异常: 默认10
         **/
        public static final String FALLBACK_ISOLATION_SEMAPHORE_MAX_CONCURRENT_REQUESTS = "fallback.isolation.semaphore.maxConcurrentRequests";

        /**
         * 配置服务降级策略是否启用: 默认true
         **/
        public static final String FALLBACK_ENABLED = "fallback.enabled";
    }

    /**
     * circuitBreaker配置 断路器用来控制HystrixCircuitBreaker
     *
     * @see com.netflix.hystrix.HystrixCircuitBreaker
     * @see com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand#commandProperties()
     * @see com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty
     **/
    public static class CircuitBreakerConstants {

        /**
         * 配置当服务请求命令失败时,是否使用断路器来跟踪其健康指标和熔断请求: 默认true
         **/
        public static final String CIRCUIT_BREAKER_ENABLED = "circuitBreaker.enabled";

        /**
         * 配置在滚动时间窗中,断路器的最小请求数: 默认20
         **/
        public static final String CIRCUIT_BREAKER_REQUEST_VOLUME_THRESHOLD = "circuitBreaker.requestVolumeThreshold";

        /**
         * 配置当断路器打开之后的休眠时间窗,休眠时间窗结束之后,会将断路器设置为"半开",<br/>
         * 尝试熔断的请求命令,如果依然失败就将断路器继续设置为"打开"状态,如果成功,就设置"关闭"<br/>
         * 默认5000ms
         **/
        public static final String CIRCUIT_BREAKER_SLEEP_WINDOW_IN_MILLISECONDS = "circuitBreaker.sleepWindowInMilliseconds";

        /**
         * 配置断路器打开的错误百分比条件: 默认50%<br/>
         * 当在滚动时间窗中,如果请求数量超过circuitBreaker.errorThresholdPercentage前提下<br/>
         * 如果错误请求数的百分比超过50%,就把断路器设置为"打开"状态
         **/
        public static final String CIRCUIT_BREAKER_ERROR_THRESHOLD_PERCENTAGE = "circuitBreaker.errorThresholdPercentage";

        /**
         * 如果该属性为true,断路器强制进入"打开"状态,拒绝所有请求,优于circuitBreaker.forceClosed.<br/>
         * 默认为false
         **/
        public static final String CIRCUIT_BREAKER_FORCE_OPEN = "circuitBreaker.forceOpen";

        /**
         * 如果该值设置为true,断路器强制进入"关闭"状态,它会接受所有请求,默认为true<br/>
         * 当配置了circuitBreaker.forceOpen,该属性配置无效
         **/
        public static final String CIRCUIT_BREAKER_FORCE_CLOSED = "circuitBreaker.forceClosed";
    }

    /**
     * metrics配置 主要度量HystrixCommand 和 HystrixObservableCommand 的执行指标信息
     *
     * @see HystrixCommand#run()
     * @see com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand#commandProperties()
     * @see com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty
     **/
    public static class MetricsConstants {

        /**
         * 配置滚动时间窗的长度,单位毫秒: 默认 10000ms(10s).<br/>
         * 该时间用于断路器判断健康度时需要手机信息的持续时间.<br/>
         * 断路器在收集指标时会根据设置的时间窗拆分为多个"桶"来累计各度量值,<br/>
         * 每个"桶"记录了一段时间内的采集指标.<br/>
         * 该属性从Hystrix 1.4.12版本开始,只有在应用初始化的时候生效,<br/>
         * 通过动态刷新配置不会产生效果.避免出现运行期监测数据丢失的情况
         **/
        public static final String METRICS_ROLLING_STATS_TIME_IN_MILLISECONDS = "metrics.rollingStats.timeInMilliseconds";

        /**
         * 配置滚动时间窗统计信息时划分"桶"的数量: 默认10<br/>
         * metrics.rollingStats.timeInMilliseconds参数设置必须能被该参数整除,否则抛出异常.<br/>
         * 该属性从Hystrix 1.4.12版本开始,只有在应用初始化的时候生效,<br/>
         * 通过动态刷新配置不会产生效果.避免出现运行期监测数据丢失的情况.
         **/
        public static final String METRICS_ROLLING_STATS_NUM_BUCKETS = "metrics.rollingStats.numBuckets";

        /**
         * 配置对命令执行是否使用百分位数来跟踪和计算: 默认true<br/>
         * 如果配置<b>false</b>,所有概要统计均返回-1
         **/
        public static final String METRICS_ROLLING_PERCENTILE_ENABLED = "metrics.rollingPercentile.enabled";

        /**
         * 配置百分位统计的滚动窗口的持续时间: 默认:60000ms(60s)<br/>
         * 该属性从Hystrix 1.4.12版本开始,只有在应用初始化的时候生效,<br/>
         * 通过动态刷新配置不会产生效果.避免出现运行期监测数据丢失的情况.
         **/
        public static final String METRICS_ROLLING_PERCENTILE_TIME_IN_MILLISECONDS = "metrics.rollingPercentile.timeInMilliseconds";

        /**
         * 配置百分位统计滚动窗口中使用"桶"的数量: 默认6<br/>
         * metrics.rollingPercentile.timeInMilliseconds必须能被该参数整除,否则抛出异常<br/>
         * 该属性从Hystrix 1.4.12版本开始,只有在应用初始化的时候生效,<br/>
         * 通过动态刷新配置不会产生效果.避免出现运行期监测数据丢失的情况.
         **/
        public static final String METRICS_ROLLING_PERCENTILE_NUM_BUCKETS = "metrics.rollingPercentile.numBuckets";

        /**
         * 配置在执行过程中每个"桶"中保留的最大执行次数: 默认100<br/>
         * 如果在滚动时间窗内超过该设定值的执行次数,就从最初的位置开始重写<br/>
         * 增加该值的大小会增加内存量的消耗,并增加排序百分位数所需的计算时间<br/>
         * 该属性从Hystrix 1.4.12版本开始,只有在应用初始化的时候生效,<br/>
         * 通过动态刷新配置不会产生效果.避免出现运行期监测数据丢失的情况.
         **/
        public static final String METRICS_ROLLING_PERCENTILE_BUCKET_SIZE = "metrics.rollingPercentile.bucketSize";

        /**
         * 配置采集影响断路器状态的健康快照(请求的成功,错误百分比)的间隔等待时间: 默认500ms
         **/
        public static final String METRICS_HEALTH_SNAPSHOT_INTERVAL_IN_MILLISECONDS = "metrics.healthSnapshot.intervalInMilliseconds";
    }

    /**
     * hystrix request context 配置
     *
     * @see com.netflix.hystrix.strategy.concurrency.HystrixRequestContext
     * @see com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand#commandProperties()
     * @see com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty
     **/
    public static class RequestContextConstants {

        /**
         * 配置是否开启请求缓存: 默认为true
         *
         * @see com.netflix.hystrix.HystrixRequestCache
         **/
        public static final String REQUEST_CACHE_ENABLED = "requestCache.enabled";

        /**
         * 配置HystrixCommand的执行和事件是否打印日志到HystrixRequestLog: 默认为true
         *
         * @see com.netflix.hystrix.HystrixRequestLog
         **/
        public static final String REQUEST_LOG_ENABLED = "requestLog.enabled";
    }

    /**
     * hystrix collapser constants
     *
     * @see com.netflix.hystrix.HystrixCollapser
     * @see com.netflix.hystrix.contrib.javanica.annotation.HystrixCollapser
     * @see com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty
     **/
    public static class CollapserConstants {

        /**
         * 配置一次请求合并并批处理中允许最大请求数: 默认Integer.MAX_VALUE
         **/
        public static final String MAX_REQUESTS_IN_BATCH = "maxRequestsInBatch";

        /**
         * 配置批处理过程中每个命令延迟时间: 默认10ms
         **/
        public static final String TIMER_DELAY_IN_MILLISECONDS = "timerDelayInMilliseconds";

        /**
         * 配置批处理过程中是否开启请求缓存
         **/
        public static final String REQUEST_CACHE_ENABLED = "requestCache.enabled";
    }

    /**
     * hystrix command thread pool constants
     *
     * @see com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand#threadPoolProperties()
     * @see com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty
     **/
    public static class ThreadPoolConstants {

        /**
         * 配置命令线程池的核心线程数,命令执行最大并发量: 默认10
         **/
        public static final String CORE_SIZE = "coreSize";

        /**
         * maximum size of thread pool: 默认10
         **/
        public static final String MAXIMUM_SIZE = "maximumSize";

        /**
         * 配置线程池的最大队列大小: 默认-1<br/>
         * 配置-1,线程池使用{@link java.util.concurrent.SynchronousQueue}实现的队列,<br/>
         * 否则使用{@link java.util.concurrent.LinkedBlockingQueue}
         **/
        public static final String MAXQUEUE_SIZE = "maxQueueSize";

        /**
         * 配置队列拒绝阈值.配置该参数,即使队列没有达到最大值也拒绝请求: 默认5<br/>
         * 当maxQueueSize=-1,该配置不生效
         **/
        public static final String QUEUE_SIZE_REJECTION_THRESHOLD = "queueSizeRejectionThreshold";

        /**
         * minutes to keep a thread alive: 默认1分钟(60s)
         **/
        public static final String KEEP_ALIVE_TIMEMINUTES = "keepAliveTimeMinutes";

        /**
         * should the maximumSize config value get read and used in configuring the threadPool
         * turning this on should be a conscious decision by the user, so we default it to false: 默认false
         **/
        public static final String ALLOW_MAXIMUM_SIZE_TO_DIVERGE_FROM_CORE_SIZE = "allowMaximumSizeToDivergeFromCoreSize";

        /**
         * 配置滚动时间窗的床都,单位ms: 默认10000(10s)<br/>
         * 该滚动时间窗的长度用于线程池的指标度量,分成多个"桶"统计指标
         **/
        public static final String METRICS_ROLLING_STATS_TIME_IN_MILLISECONDS = "metrics.rollingStats.timeInMilliseconds";

        /**
         * 配置滚动时间窗被划分成"桶"的数量: 默认10<br/>
         * metrics.rollingStats.timeInMilliseconds必须能被该参数整除,不然抛出异常
         **/
        public static final String METRICS_ROLLINGSTATS_NUMBUCKETS = "metrics.rollingStats.numBuckets";
    }
}

原文地址:https://www.cnblogs.com/liuenyuan1996/p/10292095.html

时间: 2024-11-05 15:59:17

Hystrix断路器配置属性解析的相关文章

Spring Cloud(Dalston.SR5)--Feign 与 Hystrix 断路器整合

创建项目 要使 Feign 与 Hystrix 进行整合,我们需要增加 Feign 和 Hystrix 的依赖,修改 POM.xml 中增加以下依赖项如下: <?xmlversion="1.0"encoding="UTF-8"?> <projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-in

Hystrix线程隔离技术解析-线程池(转)

认识Hystrix Hystrix是Netflix开源的一款容错框架,包含常用的容错方法:线程隔离.信号量隔离.降级策略.熔断技术. 在高并发访问下,系统所依赖的服务的稳定性对系统的影响非常大,依赖有很多不可控的因素,比如网络连接变慢,资源突然繁忙,暂时不可用,服务脱机等.我们要构建稳定.可靠的分布式系统,就必须要有这样一套容错方法. 本文主要讨论线程隔离技术. 为什么要做线程隔离 比如我们现在有3个业务调用分别是查询订单.查询商品.查询用户,且这三个业务请求都是依赖第三方服务-订单服务.商品服

SpringCloud 进阶之Hystrix(断路器)

1. Hystrix 断路器 Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败, 比如超时,异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分 布式系统的弹性; "断路器"本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方 返回一个符合预期的,可处理的备选响应(FallBack),而不是长时间的等待或者抛出调用方无法处理的异常,这样就

Hibernate 中配置属性详解(hibernate.properties)

Hibernate能在各种不同环境下工作而设计的, 因此存在着大量的配置参数.多数配置参数都 有比较直观的默认值, 并有随 Hibernate一同分发的配置样例hibernate.properties 来展示各种配置选项. 所需做的仅仅是将这个样例文件复制到类路径 (classpath)下并做一些自定义的修改. 属性1.Hibernate JDBC属性 属性名 用途 hibernate.connection.driver_class jdbc驱动类 hibernate.connection.ur

DNS各种基本配置(正向解析区域、反向解析区域;主/从;子域;基本安全控制)

DNS服务器所提供的服务是完成将主机名和转换为IP地址的工作.为什么需要将主机名转换为IP地址的工作呢?这是因为,当网络上的一台客户机访问某一服务器上的资源时,用户在浏览器地址栏中输入的是人类便于识记的主机名和域名.而网络上的计算机之间实现连接却是通过每台计算机在网络中拥有的惟一的IP地址来完成的,这样就需要在用户容易记忆的地址和计算机能够识别的地址之间有一个解析,DNS服务器便充当了地址解析的重要角色. 域名严格意义上的称呼为FQDN(Full Qualified Domain Name).域

Spring中配置属性文件

Spring中配置和读取Properties文件 public class PropertiesFactoryBeanextends PropertiesLoaderSupportimplements FactoryBean, InitializingBean Allows for making a properties file from a classpath location available as Properties instance in a bean factory. Can b

SpringMVC中用于绑定请求数据的注解以及配置视图解析器

SpringMVC中用于绑定请求数据的注解 在上一篇文章中我们简单介绍了@RequestMapping与@RequestParam注解,知道了如何去配置地址映射,本篇则介绍一些用于处理request数据的注解. [email protected]注解,该注解用于处理request中的header部分,也就是http请求头的部分,它可以把header部分的值绑定到方法的参数上,示例: package org.zero01.test; import org.springframework.stere

webpack2的配置属性说明entry,output,state,plugins,node,module,context

Webpack2配置属性详解 webpack说明 webpack是前端构建的一个核心所在,如果说后端构建就是把高级语言代码编译成机器码,那么前端的构建就是重新组合原有的代码,虽然并不编译成机器码,但实际上,因为前端长期使用简单的脚本开发,HTML,CSS,JS互相分离,难以形成类似工程化的"凝聚力". 所以伴随着大量的模块化标准的建立,"组件化"前端的概念也逐渐确立,前端开始着重以功能模块为划分,而不是和以前一般以代码种类为划分. webpack是很好的构建解决方案

webpack-dev-server主要的配置属性

桃子叔叔为您解析webpack-dev-server主要的配置属性:https://blog.csdn.net/franktaoge/article/details/80083317?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task webpack配置文件中publicPath和contentBase傻傻分不清:https://blog.csdn.net/