溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringCloud Zuul怎么實現負載均衡和熔斷機制

發(fā)布時間:2021-07-05 14:35:04 來源:億速云 閱讀:209 作者:小新 欄目:開發(fā)技術

小編給大家分享一下SpringCloud Zuul怎么實現負載均衡和熔斷機制,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

一、場景

Zuul網關下實現其負載均衡與熔斷機制(雪崩)進行實踐,前提是已經導入zuul相關依賴

springboot版本:1.5.9.RELEASE

springcloud版本:Dalston.SR5

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zuul</artifactId>
        </dependency>
        <dependency>
            <groupId>com.netflix.zuul</groupId>
            <artifactId>zuul-core</artifactId>
            <version>1.3.0</version>
        </dependency>
</dependencies>

二、場景實現

1、在網關的配置文件中配置ribbon(負載均衡)和hystrix(熔斷機制)

#熔斷機制
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 6000
 
#負載均衡
ribbon:
  ConnectionTimeout: 500
  ReadTimeout: 2000
#端口
server:
  port: 8080
spring:
  #該配置文件中的配置,對應的服務名稱是wc-gateway
  application:
    name: wc-gateway
  profiles:
    active: dev
#服務網關配置
zuul:
  host:
    connect-timeout-millis: 60000
    socket-timeout-millis: 60000
  #路由規(guī)則
  routes:
    api:
      path: /api/user/**
      serviceId: wc-client-user

其實ribbon的真實值=(ConnectionTimeout+ReadTimeout)*2,該值最好小于hystrix的timeoutInMilliseconds的值,因為如果大于其值會失去負載均衡(ribbon)的重試機會,而直接熔斷

2、驗證負載均衡

因為zuul下自帶了hystrix,ribbon相關jar包,所有現在已經實現了負載均衡和熔斷機制,接下來進行驗證

在client服務下編寫controller,測試負載均衡

package top.wingcloud.controller; 
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
/**
 * @author: linjie
 * @description: 用戶服務請求處理控制器
 * @create: 2018/11/06 09:16
 */
@RestController
public class UserController {
    @Value("${server.port}")
    private int port; 
    @RequestMapping("index")
    public String index(){
        return "Hello World!"+port;
    }
}

依次啟動注冊中心、配置中心、client服務、修改端口再次啟動client服務、服務網關

根據網關的路由,訪問同一個路由,發(fā)現啟動的兩個不同端口的client服務交替執(zhí)行

SpringCloud Zuul怎么實現負載均衡和熔斷機制

SpringCloud Zuul怎么實現負載均衡和熔斷機制

出現該情況即實現了負載均衡

3、驗證熔斷機制

在網關服務中需要寫ZuulFallbackProvider的實現類

package top.wingcloud.filter; 
import org.springframework.cloud.netflix.zuul.filters.route.ZuulFallbackProvider;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.stereotype.Component; 
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
 
/**
 * @author: linjie
 * @description:錯誤攔截回顯,熔斷
 * @create: 2018/10/11 20:01
 */
@Component
public class ApiFallbackProvider implements ZuulFallbackProvider{
 
    @Override
    public String getRoute() {
        //設置熔斷的服務名
        //如果是所有服務則設置為*
        return "wc-client-user";
    }
 
    @Override
    public ClientHttpResponse fallbackResponse() {
        return new ClientHttpResponse() {
            @Override
            public HttpStatus getStatusCode() throws IOException {
                return HttpStatus.OK;
            }
 
            @Override
            public int getRawStatusCode() throws IOException {
                return 200;
            }
 
            @Override
            public String getStatusText() throws IOException {
                return "{code:0,message:service error =_=}";
            }
 
            @Override
            public void close() {
 
            }
 
            @Override
            public InputStream getBody() throws IOException {
                return new ByteArrayInputStream(getStatusText().getBytes());
            }
 
            @Override
            public HttpHeaders getHeaders() {
                HttpHeaders headers = new HttpHeaders();
                headers.setContentType(MediaType.APPLICATION_JSON);
                return headers;
            }
        };
    }
}

這個時候關閉client所有服務,再次訪問之前的網關路由

出現了getStatusText()中的提示,即實現了熔斷機制

SpringCloud Zuul怎么實現負載均衡和熔斷機制好了,zuul下的負載均衡和熔斷已經實現!

zuul網關配置+限流熔斷

被調方:延時600ms

SpringCloud Zuul怎么實現負載均衡和熔斷機制

ahas:

SpringCloud Zuul怎么實現負載均衡和熔斷機制

user限流:

SpringCloud Zuul怎么實現負載均衡和熔斷機制

trade熔斷:(3秒內請求數>4)&&(3s內慢調用/請求數>50%) -》》開啟熔斷

慢調用標準:響應時間大于500ms

SpringCloud Zuul怎么實現負載均衡和熔斷機制

20個請求測試:

SpringCloud Zuul怎么實現負載均衡和熔斷機制

測試限流:

SpringCloud Zuul怎么實現負載均衡和熔斷機制

測試限流和rt熔斷

SpringCloud Zuul怎么實現負載均衡和熔斷機制

以上是“SpringCloud Zuul怎么實現負載均衡和熔斷機制”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI