「 從0到1學習微服務SpringCloud 」10 服務網關Zuul

系列文章(更新ing):

「 從0到1學習微服務SpringCloud 」06 統一配置中心Spring Cloud Config
「 從0到1學習微服務SpringCloud 」07 RabbitMq的基本使用
「 從0到1學習微服務SpringCloud 」08 構建消息驅動微服務的框架 Spring Cloud Streamnginx

爲何須要服務網關

假如當前有十幾個微服務服務,訂單,商品,用戶等等,那客戶端須要和每一個服務逐一打交道?這顯然是不現實的,這就須要有一個統一入口,它就是服務網關。git

image

經常使用的網關方案

  • Nginx + Lua
  • Kong
  • Tyk
  • Spring Cloud Zuul

這裏就不一一介紹了,感興趣的可自行查資料。今天的主角是Zuul。github

Zuul雖然在性能上和nginx無法比,但它也有它的優勢。Zuul 提供了認證鑑權,動態路由,監控,彈性,安全,負載均衡等邊緣服務,在團隊規模不大的狀況下,沒有專門負責路由開發時,使用Zuul當網關是一個快速上手的好方案。spring

nginx和Zuul是能夠配合使用的,發揮各自的優勢,使用nginx做爲負載均衡實現高併發的請求轉發,Zuul用做網關api

Zuul的特色

  • 路由+過濾器 = Zuul
  • 核心是一系列過濾器

Zuul的工做原理

zuul的核心是一系列的filters, 其做用能夠類比Servlet框架的Filter,或者AOP。
過濾器之間沒有直接進行通訊,而是經過Request Context(上下文)進行數據傳遞。安全

Zuul的過濾器是由Groovy寫成,這些過濾器文件被放在Zuul Server上的特定目錄下面,Zuul會按期輪詢這些目錄,修改過的過濾器會動態的加載到Zuul Server中以便過濾請求使用。 cookie

image

四種過濾器
(1) PRE(前置):這種過濾器在請求被路由以前調用。咱們可利用這種過濾器實現鑑權、限流、參數校驗調整等。併發

(2) ROUTING(路由):這種過濾器將請求路由到微服務。這種過濾器用於構建發送給微服務的請求,並使用Apache HttpClient或Netfilx Ribbon請求微服務。app

(3) POST(後置):這種過濾器在路由到微服務之後執行。這種過濾器可用來爲響應添加標準的HTTP Header、收集統計信息和指標、將響應從微服務發送給客戶端、日誌等。負載均衡

(4) ERROR(錯誤):在其餘階段發生錯誤時執行該過濾器。

過濾器的生命週期

image

HTTP請->一系列過濾器->微服務->HTTP響應

Zuul的基本使用

1.新建一個子模塊,勾選eureka discovery和zull
(咱們這裏後面的練習就不用config組件了,由於在github修改配置有點麻煩)

image

並添加父子模塊的關聯,把子模塊中多餘的聲明刪掉

2.yml文件添加相關配置,入口類添加@EnableEurekaClient和@EnableZuulProxy註解

server:
  port: 8900
spring:
    application:
          name: api-gateway
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

3.如今已經能夠作到路由的功能了,咱們來試試。啓動service-hi應用,經過網關入口進行訪問,訪問規則:網關域名/目標服務/目標接口名,下面調用service-hi服務的hi接口

image

4.可自定義路由,設置自定義的路徑。
配置以下,兩種方式

zuul:
  routes:
    # 方法1
    # 聲明一個路由規則,名稱隨意取名就行
    # 該規則爲 /myHi/**  路由到 /service-hi/** (**爲任意匹配)
    myHi:
      # 路由路徑 (路由到哪一個路徑)
      path: /myHi/**
      # 服務名 (須要路由的服務)
      serviceId: service-hi
      # 這裏須要注意一下,使用zuul進行路由,默認不傳遞cookie
      # 若要傳遞,添加下面的配置(內容爲空就行)
      sensitivedHeaders:


    # 方法2
    # 路由聲明 簡潔寫法 服務名: 路由路徑
    service-hi: /myHi/**

  # 忽略路徑,不作路由
  ignored-patterns:
   - /service-hi/hi
   # 也可使用通配符
   - /**/hi

訪問配置的路由路徑,便可訪問到相應接口啦~

image

Zuul的高可用

  • 多個Zuul節點註冊到Eureka Server上,不須要其餘的配置
  • Nginx和Zuul"混搭"使用,取長補短

已將代碼上傳到github

https://github.com/zhangwenka...

若是以爲不錯,分享給你的朋友!

image

image

 THANDKS

  • End -

一個立志成大腿而天天努力奮鬥的年輕人

伴學習伴成長,成長之路你並不孤單!

掃描二維碼,關注公衆號

相關文章
相關標籤/搜索