Hystrix斷路器

語言: CN / TW / HK

Hystrix斷路器是什麼呢?

Hystix是Netflix開源的一個延遲和容錯庫,用於隔離訪問遠端服務、第三方庫,防止出現級聯失敗。
在微服務I發生異常,請求阻塞,使用者不會得到響應,則tomcat的這個執行緒不會釋放,於是越來越多的使用者請求到來,越來越多的執行緒會阻塞,伺服器支援的執行緒和併發數有限,請求一直阻塞,會導致伺服器資源耗盡,從而導致所有其它服務都不可用,形成雪崩效應。

那麼這個問題如何解決呢?來我們一起編寫Hystrix

新建提供者cloud-provider-hystrix-payment8001模組
在這裡插入圖片描述
匯入依賴,這裡我們先把hystrix依賴註釋掉,先模擬一下伺服器發生超時的狀況

 <dependencies>
        <!-- hystrix -->
            <!--<dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
            </dependency>-->
        <!--eureka-client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <!-- 引入自己定義的api通用包,可以使用Payment支付Entity -->
            <groupId>org.example</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

編寫配置檔案
在這裡插入圖片描述
編寫啟動類在這裡插入圖片描述
來寫service,因為我們只是模擬一下伺服器連線超時,所有就不去連線資料庫了在這裡插入圖片描述
編寫controller
在這裡插入圖片描述
訪問正常的方法
在這裡插入圖片描述
訪問延遲的方法,現在都沒有問題
在這裡插入圖片描述
接下來我們使用軟體來模擬伺服器在高併發的情況下會如何,設定一下執行緒數量
在這裡插入圖片描述
在這裡插入圖片描述
我們再來訪問一下試試,可以看出在高併發的情況下一直在重新整理,這樣會讓客戶等的時間太長,客戶體驗極差,你們公司很有可能就涼涼了,就算沒有訪問到也應該給客戶一個提示語句,不能一直瞎等下去,這裡我們就需要用到Hystrix斷路器了
在這裡插入圖片描述
把這個配置檔案的註釋解開














<dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
            </dependency>

修改我們的啟動類,這個註解裡邊包含了上邊上個註解,這是開啟斷路器用的
在這裡插入圖片描述
service層修改一下,注:使用者等待3000是毫秒
在這裡插入圖片描述
測試一下,這裡是使用者最多等待三秒,但是我們模擬的是讓它休眠五秒在執行,所以也就超時了,呼叫了備選方案
在這裡插入圖片描述
在這裡插入圖片描述