中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

SpringCloud微服務網關Zuul的作用是什么

發布時間:2022-07-18 10:13:27 來源:億速云 閱讀:494 作者:iii 欄目:開發技術

這篇文章主要介紹“SpringCloud微服務網關Zuul的作用是什么”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“SpringCloud微服務網關Zuul的作用是什么”文章能幫助大家解決問題。

    網關的作用

    微服務架構中,服務實例的地址可能經常會發生變化,所以我們不能直接將服務的地址暴露出來。如果每一個微服務都直接暴露接口,會導致一系列的問題,比如調用過于復雜,涉及到賬戶、權限不能統一處理等。另外基于高內聚低耦合的設計準則來講,我們也應該將內部系統和外部系統做切割。

    因此,這時就需要有一個獨立的組件來處理外部的請求,這個組件就是服務網關。服務網關就是為了簡化前端的調用邏輯,通常情況下也會實現相關的認證邏輯,根據外部不同的請求響應不同的數據,從而簡化內外部系統之間調用的復雜度。

    SpringCloud微服務網關Zuul的作用是什么

    服務網關負責服務請求路由、組合及協議轉換。客戶端的所有請求都首先經過服務網關,然后由它將請求路由到合適的微服務。服務網關經常會通過調用多個微服務并合并結果來處理一個請求,它可以在系統外部與內部響應之間友好的轉換。

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

    Spring Cloud 網關組件Zuul介紹

    Zuul 是 Netflix 公司開源的產品,被稱為第一代網關,也是 Spring Cloud 前幾個版本默認使用的一款提供動態路由微服務網關組件。Zuul 接收所有外來請求,并將請求轉發到對應的后端服務。作為一個前置服務,Zuul 旨在實現動態路由,監控,彈性和安全性等功能。

    Zuul 提供了不同類型的 filter 用于處理請求,這些 filter 可以讓我們實現以下功能:

    • 權限控制和安全性:可以識別認證需要的信息和拒絕不滿足條件的請求。

    • 監控:與邊緣位置追蹤有意義的數據和統計結果,從而帶來精確的生產視圖。

    • 動態路由:根據需要動態地路由請求到后臺的不同集群。

    • 壓力測試:逐漸增加指向集群的流量,以了解性能。

    • 負載均衡:為每一種負載類型分配對應容量,并棄用超出限定值的請求

    • 靜態資源處理:直接在 zuul 處理靜態資源的響應,從而避免其轉發到內部集群。

    Zuul網關實戰

    之前的介紹中,我們啟動了注冊中心registry,dms服務,和app服務,請求時,直接調用了app服務的接口,app服務又調用了dms服務:

    SpringCloud微服務網關Zuul的作用是什么

    加上網關服務之后,就會變成如下:

    SpringCloud微服務網關Zuul的作用是什么

    接下來,我們創建zuul服務:

    1、創建服務

    創建子模塊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、創建配置文件

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

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

    3、創建Zuul過濾器

    public class MyZuulFilter extends ZuulFilter {
    //    pre :可以在請求被路由之前調用
    //    route :在路由請求時候被調用
    //    post :在route和error過濾器之后被調用
    //    error :處理請求時發生錯誤時被調用
        @Override
        public String filterType() {
            return "pre";// 前置過濾器
        }
        //通過int值來定義過濾器的執行順序,優先級為0,數字越大,優先級越低
        @Override
        public int filterOrder() {
            return 0;
        }
        //返回一個boolean類型來判斷該過濾器是否要執行,所以通過此函數可實現過濾器的開關
        @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過濾該請求,不進行路由
                currentContext.setSendZuulResponse(false);
                //設置返回的錯誤碼
                currentContext.setResponseStatusCode(401);
                currentContext.setResponseBody("AccessToken is null");
                return null;
            }
            System.out.println("獲取到AccessToken為:"+accessToken);
            // 否則正常執行業務邏輯.....
            return null;
        }
    }

    4、編寫啟動類

    注意增加@EnableZuulProxy注解

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

    5、啟動驗證

    這個時候,我們將直接請求app的接口地址,改成網關zuul的地址和端口:http://localhost:8004/app/index

    SpringCloud微服務網關Zuul的作用是什么

    關于“SpringCloud微服務網關Zuul的作用是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

    向AI問一下細節

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

    AI

    蓬莱市| 临清市| 清水县| 镇赉县| 肥城市| 宝清县| 天津市| 商南县| 平潭县| 喀喇| 常熟市| 科技| 鄂伦春自治旗| 新兴县| 澎湖县| 临猗县| 陆丰市| 渝中区| 施甸县| 息烽县| 广汉市| 奉节县| 新安县| 崇义县| 马鞍山市| 蛟河市| 南靖县| 克东县| 台中县| 康马县| 泉州市| 固原市| 郴州市| 佛教| 江陵县| 油尖旺区| 临桂县| 玛纳斯县| 白城市| 醴陵市| 阿拉善盟|