最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringCloud超詳細講解微服務網關Zuul

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

網關的作用

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

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

服務網關負責服務請求路由、組合及協(xié)議轉換??蛻舳说乃姓埱蠖际紫冉涍^服務網關,然后由它將請求路由到合適的微服務。服務網關經常會通過調用多個微服務并合并結果來處理一個請求,它可以在系統(tǒng)外部與內部響應之間友好的轉換。

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

Spring Cloud 網關組件Zuul介紹

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

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

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

Zuul網關實戰(zhàn)

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

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

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

1、創(chuàng)建服務

創(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: #活動
      path: /app/** #配置請求URL的請求規(guī)則
      serviceId: app #指定Eureka注冊中心中的服務id
    dms: #活動
      path: /dms/** #配置請求URL的請求規(guī)則
      serviceId: dms #指定Eureka注冊中心中的服務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 :可以在請求被路由之前調用
//    route :在路由請求時候被調用
//    post :在route和error過濾器之后被調用
//    error :處理請求時發(fā)生錯誤時被調用
    @Override
    public String filterType() {
        return "pre";// 前置過濾器
    }
    //通過int值來定義過濾器的執(zhí)行順序,優(yōu)先級為0,數字越大,優(yōu)先級越低
    @Override
    public int filterOrder() {
        return 0;
    }
    //返回一個boolean類型來判斷該過濾器是否要執(zhí)行,所以通過此函數可實現過濾器的開關
    @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);
        // 否則正常執(zhí)行業(yè)務邏輯.....
        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

可以看到,請求中沒有token訪問授權認證失??!

總結

總結下網關的作用:

  • 簡化客戶端調用的復雜度,統(tǒng)一處理外部請求。
  • 數據的裁剪和聚合,根據不同的接口需求,對數據加工后對外提供接口
  • 多平臺的支持,對不同的客戶端提供不同的網關支持。
  • 遺留系統(tǒng)的微服務化改造,可以作為新老系統(tǒng)的中轉組件。
  • 統(tǒng)一處理調用過程中的安全、權限問題。

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

相關文章

  • Caused?by:?java.lang.NumberFormatException:?For?input?string:?“port“(問題解決)

    Caused?by:?java.lang.NumberFormatException:?For?input?s

    這篇文章主要介紹了Caused?by:?java.lang.NumberFormatException:?For?input?string:?“port“,本文給大家分享完美解決方法,需要的朋友可以參考下
    2023-01-01
  • springboot啟動前執(zhí)行方法的四種方式總結

    springboot啟動前執(zhí)行方法的四種方式總結

    這篇文章主要給大家介紹了關于springboot啟動前執(zhí)行方法的四種方式,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-01-01
  • windows java.exe內存暴漲解決、idea跑java\ tomcat內存無限增長

    windows java.exe內存暴漲解決、idea跑java\ tomcat內存無限增長

    這篇文章主要介紹了windows java.exe內存暴漲解決、idea跑 java\ tomcat內存無限增長,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Java使用pulsar-flink-connector讀取pulsar catalog元數據代碼剖析

    Java使用pulsar-flink-connector讀取pulsar catalog元數據代碼剖析

    這篇文章主要介紹了Java使用pulsar-flink-connector讀取pulsar catalog元數據代碼剖析,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • Java?NIO?中Buffer?緩沖區(qū)解析

    Java?NIO?中Buffer?緩沖區(qū)解析

    這篇文章主要介紹了Java?NIO?中Buffer?緩沖區(qū),Java?NIO?中的?Buffer?用于和?NIO?通道進行交互。數據是通道讀取到緩沖區(qū),從緩沖區(qū)寫入到通道中的。下面內容希望幫助帶大家理解
    2022-02-02
  • Java中類的定義與實例化詳解

    Java中類的定義與實例化詳解

    這篇文章主要給大家介紹了關于Java中類的定義與實例化的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-11-11
  • VSCode?配置?Spring?Boot?項目開發(fā)環(huán)境的全過程

    VSCode?配置?Spring?Boot?項目開發(fā)環(huán)境的全過程

    兩三年前曾經試過配置Java環(huán)境, 存在不少問題作罷. 最近搜了下相關的文章, 感覺VSCode對Java項目的支持比三年前完善了不少. 今天實際配置了一下環(huán)境, 把自己常用的功能過了一遍, 基本能跑通開發(fā)流程, 做個筆記,需要的朋友可以參考下
    2024-03-03
  • 深入理解Java多線程與并發(fā)編程

    深入理解Java多線程與并發(fā)編程

    這篇文章主要介紹了Java多線程與并發(fā)編程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • Spark SerializedLambda錯誤的兩種解決方案

    Spark SerializedLambda錯誤的兩種解決方案

    這篇文章主要介紹了Spark SerializedLambda錯誤的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringBoot找不到映射文件的處理方式

    SpringBoot找不到映射文件的處理方式

    這篇文章主要介紹了SpringBoot找不到映射文件的處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10

最新評論

永德县| 盈江县| 吉林市| 横山县| 长春市| 南岸区| 临安市| 莆田市| 渝北区| 丹寨县| 都兰县| 安新县| 双流县| 留坝县| 长武县| 许昌市| 信阳市| 新乡县| 惠州市| 六安市| 定南县| 洛浦县| 方城县| 武穴市| 乾安县| 昆明市| 盐津县| 东阳市| 漳浦县| 章丘市| 恩平市| 遂昌县| 天津市| 玛沁县| 东乌珠穆沁旗| 共和县| 陵川县| 渝中区| 海城市| 武山县| 吐鲁番市|