欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringCloud超詳細(xì)講解微服務(wù)網(wǎng)關(guān)Zuul

 更新時(shí)間:2022年07月16日 11:18:32   作者:_時(shí)光煮雨  
這篇文章主要介紹了SpringCloud Zuul微服務(wù)網(wǎng)關(guān),負(fù)載均衡,熔斷和限流,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

網(wǎng)關(guān)的作用

微服務(wù)架構(gòu)中,服務(wù)實(shí)例的地址可能經(jīng)常會(huì)發(fā)生變化,所以我們不能直接將服務(wù)的地址暴露出來。如果每一個(gè)微服務(wù)都直接暴露接口,會(huì)導(dǎo)致一系列的問題,比如調(diào)用過于復(fù)雜,涉及到賬戶、權(quán)限不能統(tǒng)一處理等。另外基于高內(nèi)聚低耦合的設(shè)計(jì)準(zhǔn)則來講,我們也應(yīng)該將內(nèi)部系統(tǒng)和外部系統(tǒng)做切割。

因此,這時(shí)就需要有一個(gè)獨(dú)立的組件來處理外部的請(qǐng)求,這個(gè)組件就是服務(wù)網(wǎng)關(guān)。服務(wù)網(wǎng)關(guān)就是為了簡(jiǎn)化前端的調(diào)用邏輯,通常情況下也會(huì)實(shí)現(xiàn)相關(guān)的認(rèn)證邏輯,根據(jù)外部不同的請(qǐng)求響應(yīng)不同的數(shù)據(jù),從而簡(jiǎn)化內(nèi)外部系統(tǒng)之間調(diào)用的復(fù)雜度。

服務(wù)網(wǎng)關(guān)負(fù)責(zé)服務(wù)請(qǐng)求路由、組合及協(xié)議轉(zhuǎn)換??蛻舳说乃姓?qǐng)求都首先經(jīng)過服務(wù)網(wǎng)關(guān),然后由它將請(qǐng)求路由到合適的微服務(wù)。服務(wù)網(wǎng)關(guān)經(jīng)常會(huì)通過調(diào)用多個(gè)微服務(wù)并合并結(jié)果來處理一個(gè)請(qǐng)求,它可以在系統(tǒng)外部與內(nèi)部響應(yīng)之間友好的轉(zhuǎn)換。

本文將先著重介紹Zuul組件。

Spring Cloud 網(wǎng)關(guān)組件Zuul介紹

Zuul 是 Netflix 公司開源的產(chǎn)品,被稱為第一代網(wǎng)關(guān),也是 Spring Cloud 前幾個(gè)版本默認(rèn)使用的一款提供動(dòng)態(tài)路由微服務(wù)網(wǎng)關(guān)組件。Zuul 接收所有外來請(qǐng)求,并將請(qǐng)求轉(zhuǎn)發(fā)到對(duì)應(yīng)的后端服務(wù)。作為一個(gè)前置服務(wù),Zuul 旨在實(shí)現(xiàn)動(dòng)態(tài)路由,監(jiān)控,彈性和安全性等功能。

Zuul 提供了不同類型的 filter 用于處理請(qǐng)求,這些 filter 可以讓我們實(shí)現(xiàn)以下功能:

  • 權(quán)限控制和安全性:可以識(shí)別認(rèn)證需要的信息和拒絕不滿足條件的請(qǐng)求。
  • 監(jiān)控:與邊緣位置追蹤有意義的數(shù)據(jù)和統(tǒng)計(jì)結(jié)果,從而帶來精確的生產(chǎn)視圖。
  • 動(dòng)態(tài)路由:根據(jù)需要?jiǎng)討B(tài)地路由請(qǐng)求到后臺(tái)的不同集群。
  • 壓力測(cè)試:逐漸增加指向集群的流量,以了解性能。
  • 負(fù)載均衡:為每一種負(fù)載類型分配對(duì)應(yīng)容量,并棄用超出限定值的請(qǐng)求
  • 靜態(tài)資源處理:直接在 zuul 處理靜態(tài)資源的響應(yīng),從而避免其轉(zhuǎn)發(fā)到內(nèi)部集群。

Zuul網(wǎng)關(guān)實(shí)戰(zhàn)

之前的介紹中,我們啟動(dòng)了注冊(cè)中心registry,dms服務(wù),和app服務(wù),請(qǐng)求時(shí),直接調(diào)用了app服務(wù)的接口,app服務(wù)又調(diào)用了dms服務(wù):

加上網(wǎng)關(guān)服務(wù)之后,就會(huì)變成如下:

接下來,我們創(chuàng)建zuul服務(wù):

1、創(chuàng)建服務(wù)

創(chuàng)建子模塊zuul,pom.xml引入eureka-client 和zuul的依賴

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!-- feign -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!-- zuul路由 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>

2、創(chuàng)建配置文件

server:
  port: 8004
spring:
  application:
    name: zuul

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8001/eureka/
feign:
  hystrix:
    enabled: true
zuul:
  routes:
    app: #活動(dòng)
      path: /app/** #配置請(qǐng)求URL的請(qǐng)求規(guī)則
      serviceId: app #指定Eureka注冊(cè)中心中的服務(wù)id
    dms: #活動(dòng)
      path: /dms/** #配置請(qǐng)求URL的請(qǐng)求規(guī)則
      serviceId: dms #指定Eureka注冊(cè)中心中的服務(wù)id
logging:
  pattern:
    console: '%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n'

3、創(chuàng)建Zuul過濾器

public class MyZuulFilter extends ZuulFilter {
//    pre :可以在請(qǐng)求被路由之前調(diào)用
//    route :在路由請(qǐng)求時(shí)候被調(diào)用
//    post :在route和error過濾器之后被調(diào)用
//    error :處理請(qǐng)求時(shí)發(fā)生錯(cuò)誤時(shí)被調(diào)用
    @Override
    public String filterType() {
        return "pre";// 前置過濾器
    }
    //通過int值來定義過濾器的執(zhí)行順序,優(yōu)先級(jí)為0,數(shù)字越大,優(yōu)先級(jí)越低
    @Override
    public int filterOrder() {
        return 0;
    }
    //返回一個(gè)boolean類型來判斷該過濾器是否要執(zhí)行,所以通過此函數(shù)可實(shí)現(xiàn)過濾器的開關(guān)
    @Override
    public boolean shouldFilter() {
        return true;//此處為true,說明需要過濾
    }
    //過濾器的具體邏輯。
    @Override
    public Object run() throws ZuulException {
        // 獲取上下文
        RequestContext currentContext = RequestContext.getCurrentContext();
        HttpServletRequest request = currentContext.getRequest();
        String accessToken = request.getParameter("accessToken");
        if (StringUtils.isEmpty(accessToken)) {
            //setSendZuulResponse(false)令zuul過濾該請(qǐng)求,不進(jìn)行路由
            currentContext.setSendZuulResponse(false);
            //設(shè)置返回的錯(cuò)誤碼
            currentContext.setResponseStatusCode(401);
            currentContext.setResponseBody("AccessToken is null");
            return null;
        }
        System.out.println("獲取到AccessToken為:"+accessToken);
        // 否則正常執(zhí)行業(yè)務(wù)邏輯.....
        return null;
    }
}

4、編寫啟動(dòng)類

注意增加@EnableZuulProxy注解

@EnableZuulProxy
@EnableEurekaClient
@SpringBootApplication
public class ZuulApplication {
    public static void main(String[] args) {
        SpringApplication.run(ZuulApplication.class, args);
    }
}

5、啟動(dòng)驗(yàn)證

這個(gè)時(shí)候,我們將直接請(qǐng)求app的接口地址,改成網(wǎng)關(guān)zuul的地址和端口:http://localhost:8004/app/index

可以看到,請(qǐng)求中沒有token訪問授權(quán)認(rèn)證失?。?/p>

總結(jié)

總結(jié)下網(wǎng)關(guān)的作用:

  • 簡(jiǎn)化客戶端調(diào)用的復(fù)雜度,統(tǒng)一處理外部請(qǐng)求。
  • 數(shù)據(jù)的裁剪和聚合,根據(jù)不同的接口需求,對(duì)數(shù)據(jù)加工后對(duì)外提供接口
  • 多平臺(tái)的支持,對(duì)不同的客戶端提供不同的網(wǎng)關(guān)支持。
  • 遺留系統(tǒng)的微服務(wù)化改造,可以作為新老系統(tǒng)的中轉(zhuǎn)組件。
  • 統(tǒng)一處理調(diào)用過程中的安全、權(quán)限問題。

到此這篇關(guān)于SpringCloud超詳細(xì)講解微服務(wù)網(wǎng)關(guān)Zuul的文章就介紹到這了,更多相關(guān)SpringCloud Zuul內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot3利用AOP實(shí)現(xiàn)IP黑名單功能

    SpringBoot3利用AOP實(shí)現(xiàn)IP黑名單功能

    在Web應(yīng)用開發(fā)中,控制對(duì)特定IP地址的訪問權(quán)限是一個(gè)常見的需求,通過實(shí)現(xiàn)IP黑白名單功能,我們可以允許某些IP地址訪問應(yīng)用,同時(shí)拒絕其他IP地址的訪問,本文將詳細(xì)介紹SpringBoot3利用AOP實(shí)現(xiàn)IP黑名單功能,并附上相應(yīng)的代碼片段,需要的朋友可以參考下
    2024-09-09
  • springboot解決XSS存儲(chǔ)型漏洞問題

    springboot解決XSS存儲(chǔ)型漏洞問題

    這篇文章主要介紹了springboot解決XSS存儲(chǔ)型漏洞問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Spring?main方法中如何調(diào)用Dao層和Service層的方法

    Spring?main方法中如何調(diào)用Dao層和Service層的方法

    這篇文章主要介紹了Spring?main方法中調(diào)用Dao層和Service層的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • JAVA 多態(tài) 由淺及深介紹

    JAVA 多態(tài) 由淺及深介紹

    JAVA 多態(tài) 由淺及深介紹,什么是多態(tài)?多態(tài)的詳細(xì)解釋,多態(tài)的好處,多態(tài)的實(shí)際運(yùn)用等
    2013-03-03
  • spring aop的簡(jiǎn)單使用方法詳解

    spring aop的簡(jiǎn)單使用方法詳解

    這篇文章主要介紹了spring aop的簡(jiǎn)單使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • SpringBoot自動(dòng)重啟的兩種方法

    SpringBoot自動(dòng)重啟的兩種方法

    我們?cè)陧?xiàng)目開發(fā)階段,可能經(jīng)常會(huì)修改代碼,修改完后就要重啟Spring Boot,本文主要介紹了SpringBoot自動(dòng)重啟的兩種方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • springboot中在非bean類中調(diào)用bean的實(shí)現(xiàn)方法

    springboot中在非bean類中調(diào)用bean的實(shí)現(xiàn)方法

    在Spring Boot中,非Bean類調(diào)用Bean方法通常需要通過靜態(tài)方法獲取Bean實(shí)例,然后調(diào)用相應(yīng)的方法,這種方法避免了直接在非Bean類中注入Bean,保持了代碼的簡(jiǎn)潔和可維護(hù)性,通過這種方式,可以在不改變?cè)写a結(jié)構(gòu)的情況下,實(shí)現(xiàn)Bean方法的調(diào)用
    2025-02-02
  • Java實(shí)現(xiàn)圖片對(duì)比功能

    Java實(shí)現(xiàn)圖片對(duì)比功能

    個(gè)人從來沒有研究過圖像學(xué),也沒看過什么論文或者相關(guān)文檔,寫這個(gè)完全是靠google和百度,自己寫了個(gè)實(shí)驗(yàn)了下,測(cè)試用例也少,估計(jì)有大BUG的存在,所以看的人權(quán)當(dāng)學(xué)習(xí)交流,切勿生產(chǎn)使用。
    2014-09-09
  • 關(guān)于SpringBoot創(chuàng)建存儲(chǔ)令牌的媒介類和過濾器的問題

    關(guān)于SpringBoot創(chuàng)建存儲(chǔ)令牌的媒介類和過濾器的問題

    這篇文章主要介紹了SpringBoot創(chuàng)建存儲(chǔ)令牌的媒介類和過濾器的問題,需要在配置文件中,添加JWT需要的密匙,過期時(shí)間和緩存過期時(shí)間,具體實(shí)例代碼參考下本文
    2021-09-09
  • java如何讀取文件目錄返回樹形結(jié)構(gòu)

    java如何讀取文件目錄返回樹形結(jié)構(gòu)

    這篇文章主要介紹了java如何讀取文件目錄返回樹形結(jié)構(gòu)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評(píng)論