SpringCloud學習筆記(11、斷路器Hystric)

官方文檔html

斷路器

斷路器是什麼?
以前作的,有數據服務和視圖服務,視圖服務要訪問數據服務,若是數據服務掛掉的話,那麼確定得報500,會出現一個錯誤頁面,這個讓用戶看到不合適啊,得找個東西給他糊弄一下,賣個萌、耍個賤什麼的,不行直接給他個愛的魔力轉圈圈畫面。
固然,這個不是主要的。
在微服務架構中,根據業務來拆分紅一個個的服務,服務與服務之間能夠相互調用(RPC),在Spring Cloud能夠用RestTemplate+Ribbon和Feign來調用。爲了保證其高可用,單個服務一般會集羣部署。因爲網絡緣由或者自身的緣由,服務並不能保證100%可用,若是單個服務出現問題,調用這個服務就會出現線程阻塞,此時如有大量的請求涌入,Servlet容器的線程資源會被消耗完畢,致使服務癱瘓。服務與服務之間的依賴性,故障會傳播,會對整個微服務系統形成災難性的嚴重後果,這就是服務故障的「雪崩」效應。
爲了解決這個問題,業界提出了斷路器模型。
在這裏插入圖片描述
較底層的服務若是出現故障,會致使連鎖故障。當對特定的服務的調用的不可用達到一個閥值(Hystric 是5秒20次) 斷路器將會被打開。
在這裏插入圖片描述
斷路打開後,可用避免連鎖故障,fallback方法能夠直接返回一個固定值。java

改造項目

仍是改造 product-view-service-feign.web

pom.xml

添加spring-cloud-starter-netflix-hystrix 以支持斷路器。spring

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springcloud</artifactId>
        <groupId>edu.hpu.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>product-view-service-feign</artifactId>


    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>  <!--對feign方式的支持-->
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

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

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId> <!--用於訪問路徑:/actuator/bus-refresh-->
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>   <!--用於支持RabbitMQ-->
        </dependency>

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


</project>

客戶端

ProductClientFeign,客戶端的註解中註解中加上fallback的指定類,表示若是訪問的 PRODUCT-DATA-SERVICE 不可用的話,就調用 ProductClientFeignHystrix 來進行反饋信息。apache

package edu.hpu.springcloud.client;

import edu.hpu.springcloud.pojo.Product;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.List;

@FeignClient(value = "PRODUCT-DATA-SERVICE",fallback = ProductClientFeignHystrix.class)
public interface ProductClientFeign {
    @GetMapping("/products")
    public List<Product> listProducts();
}

ProductClientFeignHystrix類

ProductClientFeignHystrix類實現ProductClientFeign接口。服務器

package edu.hpu.springcloud.client;

import edu.hpu.springcloud.pojo.Product;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
@Component
public class ProductClientFeignHystrix implements ProductClientFeign{

    @Override
    public List<Product> listProducts() {
        List<Product> result=new ArrayList<>();
        result.add(new Product(0,"呵呵,你還想白服務",0));
        return result;
    }
}

配置

application.yml,在配置中啓動斷路器。網絡

spring:
  application:
    name:  product-view-service-feign
  thymeleaf:
    cache: false
    prefix: classpath:/templates/
    suffix: .html
    encoding: UTF-8
    content-type: text/html
    mode: HTML5
  zipkin:
    base-url: http://localhost:9411

feign.hystrix.enabled: true

management:
  endpoints:
    web:
      exposure:
        include: "*"
      cors:
        allowed-origins: "*"
        allowed-methods: "*"

啓動訪問

依次啓動註冊中心、配置服務器、視圖微服務,不用啓動數據微服務。
訪問地址:http://localhost:8012/products
在這裏插入圖片描述


參考:
【1】、http://how2j.cn/k/springcloud/springcloud-hystrix/2042.html#nowhere
【2】、https://www.fangzhipeng.com/springcloud/2018/08/04/sc-f4-hystrix.html架構

本文分享 CSDN - 三分惡。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。app

相關文章
相關標籤/搜索