溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

SpringCloud-Zuul高并發(fā)請(qǐng)求下的限流處理

發(fā)布時(shí)間:2020-06-06 07:48:59 來(lái)源:網(wǎng)絡(luò) 閱讀:3888 作者:Java_老男孩 欄目:編程語(yǔ)言

高并發(fā)的情況肯定是實(shí)際場(chǎng)景中經(jīng)常碰到的情況,那么這種情況下限流措施肯定是必須的,本文我們就來(lái)看看zuul中限流的處理

高并發(fā)的限流處理

1.創(chuàng)建項(xiàng)目

??創(chuàng)建一個(gè)SpringCloud項(xiàng)目

SpringCloud-Zuul高并發(fā)請(qǐng)求下的限流處理

2.添加依賴

??必須要添加 ratelimit依賴

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zuul</artifactId>
    </dependency>
    <dependency>
        <groupId>com.marcosbarbero.cloud</groupId>
        <artifactId>spring-cloud-zuul-ratelimit</artifactId>
        <version>1.3.4.RELEASE</version>
    </dependency>
</dependencies>

3.配置文件

??在配置文件中添加限流的屬性,分為具體限流和全局限流

server.port=9030
# eureka注冊(cè)中心的配置
eureka.client.serviceUrl.defaultZone=http://dpb:123456@eureka1:8761/eureka/,http://dpb:123456@eureka2:8761/eureka/

# 定義的兩個(gè)路由規(guī)則
zuul.routes.e-book-product.path=/product/**
zuul.routes.e-book-product.serviceId=e-book-product
zuul.routes.e-book-order.path=/order/**
zuul.routes.e-book-order.serviceId=e-book-order

3.1 全局限流

??針對(duì)每一個(gè)服務(wù)都有效果

#全局配置限流
zuul.ratelimit.enabled=true
##60s 內(nèi)請(qǐng)求超過 3 次,服務(wù)端就拋出異常,60s 后可以恢復(fù)正常請(qǐng)求
zuul.ratelimit.default-policy.limit=3
zuul.ratelimit.default-policy.refresh-interval=60
##針對(duì) IP 進(jìn)行限流,不影響其他 IP
zuul.ratelimit.default-policy.type=origin

分別啟動(dòng)product和order兩個(gè)服務(wù),然后啟動(dòng)網(wǎng)關(guān)服務(wù),訪問測(cè)試如下
product服務(wù):
SpringCloud-Zuul高并發(fā)請(qǐng)求下的限流處理

一分鐘訪問的第四次

SpringCloud-Zuul高并發(fā)請(qǐng)求下的限流處理

order服務(wù):正常訪問

SpringCloud-Zuul高并發(fā)請(qǐng)求下的限流處理

一分鐘內(nèi)訪問的第四次
SpringCloud-Zuul高并發(fā)請(qǐng)求下的限流處理
全局限流配置對(duì)每個(gè)服務(wù)都有效果

3.2 局部限流

??針對(duì)特定的服務(wù)指定的限流策略

# 局部限流:針對(duì)某個(gè)服務(wù)進(jìn)行限流
##開啟限流
zuul.ratelimit.enabled=true
##60s 內(nèi)請(qǐng)求超過 3 次,服務(wù)端就拋出異常,60s 后可以恢復(fù)正常請(qǐng)求
zuul.ratelimit.policies.e-book-product.limit=3
zuul.ratelimit.policies.e-book-product.refresh-interval=60
##針對(duì)某個(gè) IP 進(jìn)行限流,不影響其他 IP
zuul.ratelimit.policies.e-book-product.type=origin

以上配置只針對(duì)e-book-product的服務(wù)一分鐘內(nèi)最多訪問3次,超過就會(huì)限流,對(duì)其他服務(wù)就沒有影響。效果可自行演示。

4.網(wǎng)關(guān)限流參數(shù)

SpringCloud-Zuul高并發(fā)請(qǐng)求下的限流處理

5.異常處理

增對(duì)error異常,我們可以提供一個(gè)全局異常處理器

@RestController
public class ExceptionHandler implements ErrorController{

    @Override
    public String getErrorPath() {

        return "error";
    }

    @RequestMapping(value="/error")
    public String error(){
        return "{\"result\":\"訪問太多頻繁,請(qǐng)稍后再訪問!?。"}";
    }

}

限流的提示如下:

SpringCloud-Zuul高并發(fā)請(qǐng)求下的限流處理

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI