1. 程式人生 > 實用技巧 >暢購商城(八):微服務閘道器和JWT令牌(轉載)

暢購商城(八):微服務閘道器和JWT令牌(轉載)

好好學習,天天向上


本文已收錄至我的Github倉庫DayDayUP:github.com/RobodLee/DayDayUP,歡迎Star,更多文章請前往:目錄導航

微服務閘道器

介紹

閘道器是介於使用者和微服務之前的中間層。說白了,閘道器就像是小區的保安,無論你想到小區的哪一戶人家去,你都得先通過小區的大門。所以,小區的保安可以做人員統計,還可以控制某個時間段進去小區的人數,限制進入小區的資格等。保證了小區業主們的安全。微服務網關同樣起著這些作用。

為什麼要有微服務閘道器

不同的微服務一般會有不同的網路地址,而外部客戶端可能需要呼叫多個服務的接口才能完成一個業務需求,如果讓客戶端直接與各個微服務通訊,會有以下的問題:

  • 客戶端會多次請求不同的微服務,增加了客戶端的複雜性
  • 存在跨域請求,在一定場景下處理相對複雜
  • 認證複雜,每個服務都需要獨立認證
  • 難以重構,隨著專案的迭代,可能需要重新劃分微服務。例如,可能將多個服務合併成一個或者將一個服務拆分成多個。如果客戶端直接與微服務通訊,那麼重構將會很難實施
  • 某些微服務可能使用了防火牆 / 瀏覽器不友好的協議,直接訪問會有一定的困難

那麼有了微服務閘道器之後,這些問題就可以得到解決。它有著以下優點。

  • 安全 ,只有網關係統對外進行暴露,微服務可以隱藏在內網,通過防火牆保護。
  • 易於監控。可以在閘道器收集監控資料並將其推送到外部系統進行分析。
  • 易於認證。可以在閘道器上進行認證,然後再將請求轉發到後端的微服務,而無須在每個微服務中進行認證。
  • 減少了客戶端與各個微服務之間的互動次數
  • 易於統一授權。

總結:微服務閘道器就是一個系統,通過暴露該微服務網關係統,方便我們進行相關的鑑權,安全控制,日誌統一處理,易於監控的相關功能

閘道器微服務

微服務搭建

一個專案中可能會用到不止一個閘道器,所以我們將閘道器微服務放在changgou-gateway父工程下。現在我們建立一個名為changou-gateway-web的微服務。有些依賴是所有閘道器微服務都要用到的,所以將這些依賴放在父工程下:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--redis-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
    <version>2.1.3.RELEASE</version>
</dependency>

啟動類和配置檔案不能少,啟動類就不貼了,配置檔案如下