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協議也會根據子網掩碼判定兩個網路中的主機處在不同的網路裡。而要實現連個網...