SpringCloud網關及Zuul項目搭建,你確定你了解?

2020-11-12 Java碼農之路

一、網關概念

1、什麼是路由網關

網關是系統的唯一對外的入口,介於客戶端和伺服器端之間的中間層,處理非業務功能 提供路由請求、鑑權、監控、緩存、限流等功能。它將"1對N"問題轉換成了"1對1」問題。

通過服務路由的功能,可以再對外提供服務時,只暴露 網關中配置的調用地址,而調用方就不需要了解後端具體的微服務主機。

2、為什麼要使用微服務網關

不同的微服務一般會有不同的網絡地址,而客戶端可能需要調用多個服務接口才能完成一個業務需求,若讓客戶端直接與各個微服務通信,會有以下問題:

(1)客戶端會多次請求不同微服務,增加了客戶端複雜性

(2)存在跨域請求,處理相對複雜

(3)認證複雜,每個服務都需要獨立認證

(4)難以重構,多個服務可能將會合併成一個或拆分成多個

3、網關的優點

微服務網關介於服務端與客戶端的中間層,所有外部服務請求都會先經過微服務網關客戶只能跟微服務網關進行交互,無需調用特定微服務接口,使得開發得到簡化

總的理解網關優點

服務網關 = 路由轉發 + 過濾器

(1)路由轉發:接收一切外界請求,轉發到後端的微服務上去。

(2)過濾器:在服務網關中可以完成一系列的橫切功能,例如權限校驗、限流以及監控等,這些都可以通過過濾器完成(其實路由轉發也是通過過濾器實現的)。

4、服務網關技術選型

引入服務網關後的微服務架構如上,總體包含三部分:服務網關、open-service和service。

(1)總體流程

服務網關、open-service和service啟動時註冊到註冊中心上去;

用戶請求時直接請求網關,網關做智能路由轉發(包括服務發現,負載均衡)到open-service,這其中包含權限校驗、監控、限流等操作

open-service聚合內部service響應,返回給網關,網關再返回給用戶

(2)引入網關的注意點

增加了網關,多了一層轉發(原本用戶請求直接訪問open-service即可),性能會下降一些(但是下降不大,通常,網關機器性能會很好,而且網關與open-service的訪問通常

是內網訪問,速度很快);

(3)服務網關基本功能

智能路由:接收外部一切請求,並轉發到後端的對外服務open-service上去;

注意:我們只轉發外部請求,服務之間的請求不走網關,這就表示全鏈路追蹤、內部服務API監控、內部服務之間調用的容錯、智能路由不能在網關完成;

當然,也可以將所有的服務調用都走網關,那麼幾乎所有的功能都可以集成到網關中,但是這樣的話,網關的壓力會很大,不堪重負。

權限校驗:可在微服務網關上進行認證,然後在將請求轉發給微服務,無須每個微服務都進行認證,不校驗服務內部的請求。服務內部的請求有必要校驗嗎?

API監控:指監控經過網關的請求,以及網關本身的一些性能指標(例如,gc等);

限流:與監控配合,進行限流操作;

API日誌統一收集:類似於一個aspect切面,記錄接口的進入和出去時的相關日誌。


二、Zuul項目搭建

使用到的組件包括:Eureka、Feign、Zuul,包括以下四個項目:

(1)Eureka-server: 7001 註冊中心

(2)product-server :8001 商品微服務

(3)order-server : 9001 訂單微服務

(4)zuul-gateway : 6001 Zuul網關

註冊中心、商品微服務、order在之前博客都已搭建,這裡就不重複寫。這裡只寫zuul-gateway微服務。

1、pom.xml

      <!--客戶端jar包,這個在訂單微服務,商品微服務都要添加-->       <dependency>           <groupId>org.springframework.cloud</groupId>           <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>       </dependency>       <!--zuuljar包-->       <dependency>           <groupId>org.springframework.cloud</groupId>           <artifactId>spring-cloud-starter-netflix-zuul</artifactId>       </dependency>

2、application.yml

server: port: 6001​#服務的名稱spring: application:   name: zuul-gateway​#指定註冊中心地址eureka: client:   serviceUrl:     defaultZone: http://localhost:7001/eureka/​#自定義路由映射zuul: routes:   order-service: /apigateway/order/**   product-service: /apigateway/product/** #統一入口為上面的配置,其他入口忽略 ignored-patterns: /*-service/** #忽略整個服務,對外提供接口 ignored-services: order-service

3、SpringBoot啟動類

@SpringBootApplication//加上網關註解@EnableZuulProxypublic class ZuulServerApplication {   public static void main(String[] args) {       SpringApplication.run(ZuulServerApplication.class, args);   }}

4、測試

(1)直接訂單服務調商品服務

(2)通過Zuul網關實現訂單接口調商品服務

5、注意些細節

(1)url不能重複,否則會覆蓋

  order-service:   /apigateway/order/**   product-service: /apigateway/product/**

(2)通過zuul後,request中的cookie值獲取不到,那是因為網關給過濾掉了。

  @RequestMapping("list")   public void list(@RequestParam("user_id")int userId, @RequestParam("product_id") int productId, HttpServletRequest request){       String token = request.getHeader("token");       String cookie = request.getHeader("cookie");       //會發現token值能夠獲取,cookie無法獲取,原因是因為網關會過濾掉敏感詞       System.out.println("token="+token);       System.out.println("cookie="+cookie);   }

想要不過濾掉cookie值那麼在配置裡配置

zuul: #處理http請求頭為空的問題 sensitive-headers:

6、問題

自己遇到兩個問題記錄下,後期再來思考解決。

1、現在通過訂單服務地址可以直接訪問訂單微服務,如何配置成訂單微服務不能直接服務,只能通過網關訪問。

思考,是不是以後訂單微服務配置到內網就不會有這個問題了。

2、當我的訂單服務調商品服務異常時,直接訪問訂單微服務熔斷降級能夠完成,通過網關竟然直接報異常了。

我在商品微服務相關接口添加:

//睡眠兩秒,微服務默認一秒就超時,所以會到降級方法TimeUnit.SECONDS.sleep(2);

直接調訂單服務,降級信息返回正常。如果通過網關訪問。

返回的是異常,這不是很蛋疼嗎,總是有解決辦法讓降級信息返回來的,以後解決來再來寫。

相關焦點

  • springcloud(三)網關zuul
    nginx是需要在配置文件中配置多個location來指定跳轉的,二網關不同,網關既可以通過別名跳轉,同時也支持服務名跳轉,什麼意思?你的請求路徑只要匹配到服務名,就可以省略一大堆的配置,而且zuul是java編寫的,集成更好。
  • Spring Cloud服務網關 zuul 快速入門
    前言:上篇博客中,我們快速搭建了一個Spring Cloud微服務的dome,那麼這個博客就是在哪個dome的基礎上開始講解一下服務網關zuul的使用,zuul的作用我在我的前面博客中也有提到,這裡就不多說。
  • springcloud-路由網關Zuul
    場景描述今天接著介紹springcloud,今天介紹下springcloud的路由網關-Zuul,外圍系統或者用戶通過網關訪問服務,網關通過註冊中心找到對應提供服務的客戶端,網關也需要到註冊中心進行註冊。
  • SpringCloud中Zuul網關原理及其配置,看它就夠了
    Zuul是spring cloud中的微服務網關。網關:是一個網絡整體系統中的前置門戶入口。請求首先通過網關,進行路徑的路由,定位到具體的服務節點上。Zuul是一個微服務網關,首先是一個微服務。也是會在Eureka註冊中心中進行服務的註冊和發現。也是一個網關,請求應該通過Zuul來進行路由。Zuul網關不是必要的。是推薦使用的。
  • springcloud(十一):服務網關Zuul高級篇
    時間過的很快,寫springcloud(十):服務網關zuul初級篇還在半年前,現在已經是2018年了,我們繼續探討Zuul更高級的使用方式。上篇文章主要介紹了Zuul網關使用模式,以及自動轉發機制,但其實Zuul還有更多的應用場景,比如:鑑權、流量轉發、請求統計等等,這些功能都可以使用Zuul來實現。
  • 全面的講解SpringCloud中Zuul網關原理及其配置,看它就夠了
    Zuul是spring cloud中的微服務網關。網關:是一個網絡整體系統中的前置門戶入口。請求首先通過網關,進行路徑的路由,定位到具體的服務節點上。Zuul是一個微服務網關,首先是一個微服務。也是會在Eureka註冊中心中進行服務的註冊和發現。也是一個網關,請求應該通過Zuul來進行路由。Zuul網關不是必要的。是推薦使用的。
  • 微服務實戰系列(六)-網關springcloud zuul
    場景描述今天接著介紹springcloud,今天介紹下springcloud的路由網關-Zuul,外圍系統或者用戶通過網關訪問服務,網關通過註冊中心找到對應提供服務的客戶端,網關也需要到註冊中心進行註冊。
  • SpringCloud zuul 動態網關配置
    環境:springboot2.2.10.RELEASE + springcloud Hoxton.SR3 + alibaba cloud 2.2.3.RELEASEalibaba cloud 是用到了 其中的 nacos 配置中心config。
  • Spring Cloud 中 Zuul 網關到底有何牛逼之處?竟然這麼多人在用!
    dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zuul</artifactId></dependency><!
  • 09-SpringCloud實戰攻略-zuul篇(12)
    第十二節 zuul服務網關1、為什麼需要網關?我們知道我們要進入一個服務本身,很明顯我們沒有特別好的辦法,直接輸入IP位址+埠號,我們知道這樣的做法很糟糕的,這樣的做法大有問題。(1)安全問題(2)單點登錄2、zuul是什麼?因此我們現在需要Zuul API網關。
  • springcloud的微服務開發日記之五(zuul路由轉發)
    2018年的日程安排如下:記錄springcloud開發微服務的全過程記錄vue實現的知識圖譜服務記錄中醫理論在知識圖譜上的應用每天一個小目標,做比昨天更好的自己博客地址 i.drai.top有興趣的可以關注一下,共同進步另:關注後可點擊頭條號的「源碼」連結,有空閒時間我會不定期的上傳源碼以供參考
  • API網關(Gateway)服務Zuul很難?看這一篇就夠了
    :import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.zuul.EnableZuulProxy
  • 微服務網關Zuul遷移到Spring Cloud Gateway
    在一個微服務集成的項目中microservice-integration,我們整合了包括網關、auth權限服務和backend服務。提供了一套微服務架構下,網關服務路由、鑑權和授權認證的項目案例。本文將以該項目中的Zuul網關升級作為示例。Zuul網關在該項目中,Zuul網關的主要功能為路由轉發、鑑權授權和安全訪問等功能。
  • SpringCloud Sentinel 整合 zuul
    .RELEASE + springcloudHoxton.SR8pom.xml依賴<properties> <java.version>1.8</java.version> <spring-cloud.version>Hoxton.SR8</spring-cloud.version
  • 微服務網關Spring Cloud Gateway全搞定
    gateway官網:https://spring.io/projects/spring-cloud-gateway實現微服務網關的技術有很多,nginx Nginx (engine x) 是一個高性能的HTTP和反向代理web伺服器,同時也提供了IMAP/POP3/SMTP服務zuul ,Zuul 是 Netflix
  • 線上SpringCloud網關調用微服務跨機房了,咋整?
    1.新建子工程Module模塊microservicecloud-zuul-gateway-9527。-- zuul路由網關 -->       <dependency>           <groupId>org.springframework.cloud</groupId>           
  • 網關基礎應用
    如果團隊正在使用微服務架構搭建服務體系,或者正在考慮向微服務架構轉型,那麼應該熟悉網關,至少應該了解網關模式,網上有關於API gateway pattern模式的詳細描述。微服務架構的API 網關作為服務的單一入口,集成許多API管理和監控層面問題,比如api路由、api鑑權、api監控、灰度發布等典型網際網路應用問題。
  • Gateway - 網關應用
    如果團隊正在使用微服務架構搭建服務體系,或者正在考慮向微服務架構轉型,那麼應該熟悉網關,至少應該了解網關模式,網上有關於API gateway pattern模式的詳細描述。微服務架構的API 網關作為服務的單一入口,集成許多API管理和監控層面問題,比如api路由、api鑑權、api監控、灰度發布等典型網際網路應用問題。
  • 微服務架構開發實戰:如何集成Zuul和實現API網關?
    //添加Spring Cloud Starter Netflix Zuul依賴compile(&39;)}使用Zuul要啟用Zuul,最簡單的方式就是在應用的根目錄Application類上添加org.springframework.cloud.netflix.zuul.EnableZuulProxy註解。
  • springcloud微服務電商 - CSDN
    6.重定向與轉發原理,跨域問題的5種解決方案(jsonp, ngnix搭建網關,httpClient轉發,spring cloud zuul, xss攻擊, http協議)7.linux基本命令8.mysql性能優化9.spring事物,傳播行為10.spring ioc,生命周期11.spring boot, spring