https://www.cnblogs.com/three-fighter/p/14971538.html
http://javadaily.cn/articles/2020/01/16/1579160378591.html
SpringCloud Gateway是基於WebFlux框架實現的,而WebFlux框架底層則使用了高性能的Reactor模式通信框架Netty。
Spring Cloud Gateway 的目標,不僅提供統一的路由方式,並且基於 Filter 鏈的方式提供了網關基本的功能,例如:安全,監控/指標,和限流。
- Nginx: Nginx由內核和模塊組成,內核的設計非常微小和簡潔,完成的工作也非常簡單,僅僅通過查找配置文件與客戶端請求進行 URL 匹配,用於啟動不同的模塊去完成相應的工作。
- Kong: Kong是一款基於OpenResty(Nginx + Lua模塊)編寫的高可用、易擴展的,由Mashape公司開源的API Gateway項目。Kong是基於NGINX和Apache Cassandra或PostgreSQL構建的,能提供易於使用的RESTful API來操作和配置API管理系統,所以它可以水平擴展多個Kong服務器,通過前置的負載均衡配置把請求均勻地分發到各個Server,來應對大批量的網絡請求
- Zuul 是 Netflix 開源的微服務網關組件,它可以和 Eureka、Ribbon、Hystrix 等組件配合使用。社區活躍,融合於 SpringCloud 完整生態,是構建微服務體系前置網關服務的最佳選型之一。
- Spring Cloud Gateway 是Spring Cloud的一個全新的API網關項目,目的是為了替換掉Zuul1。Gateway可以與Spring Cloud Discovery Client(如Eureka)、Ribbon、Hystrix等組件配合使用,實現路由轉發、負載均衡、熔斷等功能,並且Gateway還內置了限流過濾器,實現了限流的功能。
- bootstap.yml:在配置文件里除了應用名稱,我們還配置了Nacos的相關配置,不太清楚的同學可以查看上一節。

###服務名稱(服務注冊到nacos名稱,如serviceId)
spring:
cloud:
nacos:
discovery:
server-addr: http://www.XXXX.com:8848
namespace: de4a857c-8341-4d3d-a1e0-f2e64eaf8c97
config:
server-addr: http://www.XXXXX.com:8848
file-extension: yaml
#name: ${spring.application.name}
prefix: ${spring.application.name} #nacos 配置中心文件前綴
group: DEFAULT_GROUP
#變更刷新
refresh: true
remote-first: true
enabled: true
namespace: de4a857c-8341-4d3d-a1e0-f2e64eaf8c97
我們在里面進行了路由轉發的配置,也就是routes
,我們來看一看這些配置項都是什么意思:
- id: 路由的
唯一
標識,用以和其它Route區分 - uri: 請求要轉發到的地址,lb 指的是從nacos中按照名稱獲取微服務,並遵循負載均衡策略
- predicates: 路由需要滿足的條件,也是個數組(這里是
或
的關系) - filters: 過濾器,請求在傳遞過程中可以通過過濾器對其進行一定的修改
在這個配置項里,我們定義了user
開頭的請求,分發到user-service
這個服務。
接下來我們看看效果吧!
到此,我們已經引入了Spring Cloud Gateway作為微服務網關,並完成了基本的路由轉發的功能。
除了基本的路由轉發,服務網關還可以完成權限校驗、限流、API校驗等功能,后續我們會繼續深入,敬請期待!
server:
port: 8001
#開啟actuator管理api http://localhost:8080/actuator/gateway/routes
management:
endpoints:
web:
exposure:
include: "*"
###服務名稱(服務注冊到nacos名稱,如serviceId)
spring:
cloud:
gateway:
discovery:
locator:
# 是否可以通過其他服務的serviceId來轉發到具體的服務實例。默認為false
# 為true,自動創建路由,路由訪問方式:http://Gateway_HOST:Gateway_PORT/大寫的serviceId/**,
# 其中微服務應用名默認大寫訪問
enabled: true
#為true表示服務名稱(小寫)
lower-case-service-id: true
routes:
- id: box-mall-gather
uri: lb://box-mall-gather
predicates:
- Path=/open/mall/**
filters:
# 表示截取路徑的個數
- StripPrefix=1
#- AddRequestHeader=X-Request-Foo, Bar #對請求頭部添加X-Request-Foo = Bar 信息
#- AddRequestParameter=foo, bar #對匹配的請求,會額外添加foo=bar的請求參數
#- AddResponseHeader=X-Response-Foo, Bar #響應返回時會額外添加X-Response-Foo:Bar的header返回
- id: box-transaction-service
uri: lb://box-transaction-service
predicates:
- Path=/open/trade/**
filters:
# 表示截取路徑的個數
- StripPrefix=1
- id: box-member-service
uri: lb://box-member-service
predicates:
- Path=/open/member/**
filters:
# 表示截取路徑的個數
- StripPrefix=1
- id: box-marketing-service
uri: lb://box-marketing-service
predicates:
- Path=/open/marketing/**
filters:
# 表示截取路徑的個數
- StripPrefix=1
- id: box-merchants-service
uri: lb://box-merchants-service
predicates:
- Path=/open/merchants/**
filters:
# 表示截取路徑的個數
- StripPrefix=1
- id: box-items-service
uri: lb://box-items-service
predicates:
- Path=/open/items/**
filters:
# 表示截取路徑的個數
- StripPrefix=1
################### redis start ##########################
redis:
database: 1
host: 47.103.104.148
port: 6379
password: life201911
timeout: 500
pool:
# 連接池最大連接數(使用負值表示沒有限制
max-active: 20
# 連接池最大阻塞等待時間(使用負值表示沒有限制
max-wait: -1
# 連接池中的最大空閑連接
max-idle: 8
# 連接池中的最小空閑連接
min-idle: 0
################### my config start ##########################
box:
gateway:
###不需要驗證白名單
white:
List:
- /member/appAuth/login
- /member/appAuth/regist
- /mall/user/initLogin
- /member/oldBoxLife/getScoreDetailList
- /member/oldBoxLife/getScoreDetailUsedList
- /member/oldBoxLife/getMemberScoreRecord
- /member/oldBoxLife/getMemberScoreRecordUsed
- /member/oldBoxLife/regist
- /member/oldBoxLife/login
- /mall/merchants/brand/list
- /mall/merchants/market/list
- /member/oldBoxLife/getBoxsMemberByUid
- /mall/oldBoxLife/getUserMemberPoint
- /mall/integral/getIndexGoodsList
- /mall/integral/getPracticalGoodsList
- /mall/coupon/getExchangeCouponTypeList
- /mall/integral/getGoodsDetail
config:
## 測試環境簽名調試 生產設置false
debug: true
## 驗簽公鑰
publicKey: MIGfMA0GCSqGSIb3DQEBAQUA11A4GNADCBiQKBgQC+bjf2zNvnUYdZNciVLleJrZqk2jPpafFth/ock5TwvyEK//JKKLu3nC3CjB0FZiDV6FDpY/T404hPpNhgMT+F/i8PAbsJ11ssCx/YZySA9kKbx0fnvYRQCmx+TMDocId08ZkCZjbIGsc1YibsE2sR+T25p+FkMRpF9wCEh+pvUQIDAQAB
## 加簽私鑰
privateKey: MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAL5uN/bM2+dRh1k1yJUuV4mtmqTaM+lp8W2H+hyTlPC/IQr/8koou7ecLcKMHQVmINXoUOlj9PjTiE+k2GAxP4X+Lw8BuwnXWywLH9hnJID2QpvHR+e9hFAKbH5MwOhwh3TxmQJmNsgaxzViJuwTaxH5Pbmn4WQxGkX3AISH6m9RAgMBAAECgYAe4ndXIrCDmrht4ogukb6GyM4s8Gq8737Feek5m0HrrcPpKcuc9XBEfiL5y4mlZ114PpzWzZ/WkstfoEmMKzDymzBL03HfA+fFu8oQYkE4634I4vQEa75lVIuaiccWpLvZukqkUFBd80cUeb086zM5H72ex3iJYuNBv+1Lhl/AkQsQJBAPCdeQ6/NtkVV7tC9xFjIyfZZmed48uSOHqMxW0sdl0WNjpiwbO7oLTHdQnyLmF8x4u0cZDCUNloJWglnq1pEq0CQQDKm0ukoFbFquP5FwTkS60o8ffTRdE+lHKtWI3t2DFvGc9Gt98VRb/xBEbZe1uvvBAxRI5SL1Bd+irAusyyw4e1AkAfrkxDMdAR8ypzAJUxV+FIHOrL19Ene6AuGpzgDAulpAgN1fT1Kk41n1F8tsN+mIRZk6+kRMGKbpkGRnXHFV+dAkBSAsp7uOtm1+WvzkGMp5VQHaHTQ0+PpUdGI7JPtFNORYRBe+wxECrBxJlpLyXN3LIxPy7c1YoSgFEN8o8pTTyBAkEA2YvOI2/04tRApZdPFrCqOq5AWefk12znDVrWayKk9BKHhVrqNnJvvNLC99j3N/7wfSVRTShRnm75Bs/OXuBatw==