Coder Social home page Coder Social logo

fastbreak's Introduction

CircuitBreaker

AbstractCircuitBreaker

CircuitBreaker的核心**实现, 属性circuitBreakerPolicy 为CircuitBreaker熔断逻辑代理类, 属性circuitBreakerFallBack 为熔断处理的回调接口;

入口方法为execute方法,也是CircuitBreaker的主要调用方法;

BaseCircuitBreaker

BaseCircuitBreaker是AbstractCircuitBreaker实体实现; BaseCircuitBreakerPolicy是BaseCircuitBreaker类的实现代理, 当服务执行失败时,会进入统计策略,统计在thresholdWindow时间内是否达到了失败的阈值tripThreshold。 如果达到则触发熔断逻辑; 并且在halfOpenTimeout时间后,熔断器会进入半开状态,会开放服务,如果在thresholdInHalfOpen 时间内没有触发半开阈值内的失败次数则关闭状态,反之,则重新开启;

测试用例:

        final Calculate calculate = new Calculate();

        final BaseCircuitBreaker<Integer> baseCircuitBreaker = new BaseCircuitBreaker<>(10, 3 * 1000, 5 * 1000, 5,new CircuitBreakerFallBack<Integer>() {
            @Override
            public Integer call() throws Exception {
                return calculate.calculate();
            }

            @Override
            public void fallBack() {
                System.out.println("熔断中....");
            }
        });

        for (int i = 1; i <= 300; i++) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        Integer ret = baseCircuitBreaker.execute();
                        System.out.println("计算结果:" + ret);
                    } catch (Throwable throwable) {
                        throwable.printStackTrace();
                    }
                }
            }).start();
            Thread.sleep(100);
        }

SimpleCircuitBreaker

SimpleCircuitBreaker是AbstractCircuitBreaker简单实现; 相比BaseCircuitBreakerPolicy,SimpleCircuitBreakerPolicy只会在CLOSED和OPEN状态中切换; 在一定频次内达到阈值,则进入OPEN状态,并在固定时间内会重新回到CLOSED状态;

比如以下:在近50次内,达到10次失败,打开熔断,熔断时间为5ms

final Calculate calculate = new Calculate();

        final SimpleCircuitBreaker<Integer> baseCircuitBreaker = new SimpleCircuitBreaker<>(10, 50, 5, new CircuitBreakerFallBack<Integer>() {
            @Override
            public Integer call() throws Exception {
                return calculate.calculate();
            }

            @Override
            public void fallBack() {
                System.out.println("熔断中....");
            }
        });

        for (int i = 1; i <= 300; i++) {
            try {
                Integer ret = baseCircuitBreaker.execute();
                System.out.println("计算结果:" + ret);

            } catch (Exception e) {
                e.printStackTrace();
            }
        }

fastbreak's People

Contributors

zhuosir avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.