SpringCloud Gateway閘道器簡單學習

2021-10-09 08:41:28 字數 3912 閱讀 4184

zuul是第乙個進行整合閘道器介面的團隊。但是版本設計目前跟不上時代。而且團隊打算推出zuul2時團隊成員發生矛盾於是團隊走了很多。結果zuul2遲遲沒有上線。

而zuul是同步阻塞架構。就是乙個執行緒對應乙個任務。而在大量任務進入時執行緒的不斷切換會造成記憶體的大量浪費。

而gateway是非同步非阻塞架構,相對於zuul來說效率更高。而zuul2的不成熟使gateway更值得選擇。

首先是pom匯入

org.springframework.cloud<

/groupid>

spring-cloud-starter-gateway<

/artifactid>

<

/dependency>

<

!--eureka-client--

>

org.springframework.cloud<

/groupid>

spring-cloud-starter-netflix-eureka-client<

/artifactid>

<

/dependency>

<

!-- 引入自己定義的api通用包,可以使用payment支付entity --

>

com.qwf<

/groupid>

cloud-api-commons<

/artifactid>

$<

/version>

<

/dependency>

<

!--一般基礎配置類--

>

org.springframework.boot<

/groupid>

spring-boot-devtools<

/artifactid>

runtime<

/scope>

true

<

/optional>

<

/dependency>

org.projectlombok<

/groupid>

lombok<

/artifactid>

true

<

/optional>

<

/dependency>

org.springframework.boot<

/groupid>

spring-boot-starter-test<

/artifactid>

test<

/scope>

<

/dependency>

<

/dependencies>

server

:port

:9527

spring::

name

: cloud-gateway

cloud

:gateway

:discovery

:locator

:enabled

:true

#開啟從註冊中心動態建立路由的功能,利用微服務名進行路由

routes:-

id: payment_routh #payment_route #路由的id,沒有固定規則但要求唯一,建議配合服務名

#uri: http://localhost:8001 #匹配後提供服務的路由位址

uri: lb://cloud-payment-service #匹配後提供服務的路由位址

predicates

:- path=/payment/get/** # 斷言,路徑相匹配的進行路由-id

: payment_routh2 #payment_route #路由的id,沒有固定規則但要求唯一,建議配合服務名

#uri: http://localhost:8001 #匹配後提供服務的路由位址

uri: lb://cloud-payment-service #匹配後提供服務的路由位址

predicates

:- path=/payment/lb/** # 斷言,路徑相匹配的進行路由

- after=2020-09-11t00:23:25.845+08:00[asia/shanghai]

#- cookie=username,zzyy # 說明請求中要帶cookie並且鍵值對為username和zzyy才可以

#- header=x-request-id, \d+ # 請求頭要有x-request-id屬性並且值為整數的正規表示式

eureka

:instance

:hostname

: cloud-gateway-service

client

:#服務提供者provider註冊進eureka服務列表內

service-url

:register-with-eureka

:true

fetch-registry

:true

defaultzone

:

路由可以直接在yml當中配置也可以在**中配置,如下

@bean

public routelocator consumroutelocator

(routelocatorbuilder routelocatorbuilder)

這個效果和yml中的效果相同,所以還是推薦yml配置,**量少而且更加直觀

routes:-

id: payment_routh #payment_route #路由的id,沒有固定規則但要求唯一,建議配合服務名

#uri: http://localhost:8001 #匹配後提供服務的路由位址

uri: lb://cloud-payment-service #匹配後提供服務的路由位址

predicates

:- path=/payment/get/** # 斷言,路徑相匹配的進行路由

@enableeurekaclient

public

class

gatewaymain9527

}而配置filter全域性過濾可以使用自帶的filter但是不太常用

我們使用自己手寫filter過濾更加方便

@component

@slf4j

public

class

filter

implements

globalfilter

, ordered

return chain.

filter

(exchange);}

@override

public

intgetorder()

}

使用@component使spring能夠發現該元件,

繼承globalfilter, ordered兩個介面,

globalfilter介面中方法為

public mono filter(serverwebexchange exchange, gatewayfilterchain chain)

ordered介面 中方法為

public int getorder()

getorder()中返回值越小,這個元件呼叫時的優先順序就越高

而filter()中exchange是獲取request呼叫的資料和返回時的資料。filter()預設返回空值。裡面可以寫全域性的過濾。最後將修改完的資料放入chain.filter中返回

spring cloud Gateway簡單使用

2年前有幸使用過一次spring cloud 1.5.9 1.整合的是zuul做閘道器,沒有使用gateway做閘道器,一直是個小遺憾。終於在2年後的19年底再次使用spring cloud,這次果斷使用spring cloud 全家桶。閘道器就是原生的spring cloud gateway 專案...

閘道器的簡單概念

大家都知道,從乙個房間走到另乙個房間,必然要經過一扇門。同樣,從乙個網路向另乙個網路傳送資訊,也必須經過一道 關口 這道關口就是閘道器。顧名思義,閘道器 gateway 就是乙個網路連線到另乙個網路的 關口 那麼閘道器到底是什麼呢?閘道器實質上是乙個網路通向其他網路的ip位址。比如有網路a和網路b,...

閘道器的簡單介紹

閘道器 gateway 乙個網路連線到另乙個網路的 關口 閘道器實質上是乙個網路通向其他網路的ip位址。在沒有路由器的情況下,兩個網路之間是不能進行tcp ip通訊的,即使是兩個網路連線在同一臺交換機 或集線器 上,tcp ip協議也會根據子網掩碼判定兩個網路中的主機處在不同的網路裡。而要實現連個網...