首先兩個是配置路由前綴的,
下面是我網上找的一段話:
- prefix :前綴,當請求匹配前綴時會進行代理
- strip-prefix :代理前綴默認會從請求路徑中移除,通過該設置關閉移除功能,
- 當 stripPrefix=true 的時 (會移除)
- 當stripPrefix=false的時(不會移除)
基本上看上面這些也明白了,
那我們項目中是怎麼用的呢?這裏我們有兩種方式:
第一種:
我們有一個內部的微服務系統,本身沒有申請域名,又因爲是容器部署(每次啓動ip都會變),
因此不能ip加端口訪問,剛好我們部門有一個項目,所以最後決定就用這個項目做轉發了。
首先我們這個aaa項目配置中:
server.servlet.context-path = /api-aaa
zuul.routes.purchase.path = /bbb/**
zuul.routes.purchase.stripPrefix = false
zuul.routes.purchase.serviceId = bbb項目的服務名
因爲配置了項目前綴,因此,請求aaa項目,地址要加 api-aaa
可能有的人沒有看懂,再說明下,這裏我是想請求bbb項目,在aaa項目做了一層網關。
而且,這裏還設置了 stripPrefix = false
也就是說,請求過去的地址,不去除 前綴(bbb/**)
那我最後的請求地址就是:
http://api-aaa/bbb/getList.....
爲什麼是這個地址呢?
因爲是false,不去除前綴,所以要帶bbb,
而且,我們bbb的項目是配置了地址的,
請求的url,必須要有bbb。
server.servlet.context-path = /bbb
所以最後的請求就是那樣了。
如果還是沒太明白,我們還有一個場景,
和上面不同的是,這次是true,並且,不是走一個項目,而是專門的網關。
網關那邊的配置:
zuul.routes.bbb.path = /order-gateway/bbb-service/**
zuul.routes.bbb.serviceId = com-bbb-service
說明:
網關這邊沒有配置strip-prefix,也就是說是默認值true,那麼請求會自動去除這裏加的前綴。
也就是會去除/order-gateway/bbb-service/
最後的請求地址是,http://網關的域名/order-gateway/bbb-service/bbb/getList....
沒問題的:
因爲strip-prefix是true(默認)
去除前綴之後,其實最後請求到bbb系統的地址就是:
之前:http://網關的域名/order-gateway/bbb-service/bbb/getList....
去除之後:http://網關的域名/bbb/getList....
剛好就轉發到我麼bbb項目了。
終於搞懂了zuul prefix 和 strip-prefix 區別
Prefix 公共前綴
strip-prefix 不想要前綴,就配置false
想要,就不配,默認就是true
strip-prefix 既可以配全局,也可以給每個要轉發的項目配。
如果還有不明白的可以留言,這個我也是新學習,咱們可以多多交流下