判斷微服務(wù)中的http請(qǐng)求來(lái)源
使用SpringCloud做微服務(wù)開(kāi)發(fā),有時(shí)需要判斷微服務(wù)中的http請(qǐng)求來(lái)源,判斷請(qǐng)求是來(lái)自微服務(wù)網(wǎng)關(guān)轉(zhuǎn)發(fā)還是來(lái)自其它的微服務(wù)調(diào)用等情況,以便于根據(jù)不同的請(qǐng)求來(lái)源做不同的邏輯處理,這時(shí)如何才能區(qū)分請(qǐng)求來(lái)源呢?
本文給大家分享一種通過(guò)http請(qǐng)求頭來(lái)判斷微服務(wù)中的http請(qǐng)求來(lái)源方法~
SpringCloud版本 Greenwich.SR2
SpringBoot版本 2.1.7.RELEASE
工作原理
下面以我的示例工程來(lái)給大家演示,大家可以將倉(cāng)庫(kù)克隆下來(lái)方便測(cè)試:https://github.com/netbuffer/spring-cloud-demo
1.在微服中添加返回http請(qǐng)求頭的映射方法,來(lái)觀察請(qǐng)求頭信息

2.啟動(dòng)相應(yīng)的微服務(wù)注冊(cè)中心、微服務(wù)、微服務(wù)網(wǎng)關(guān)組件

3.通過(guò)直接訪問(wèn)微服務(wù)的headers接口與通過(guò)網(wǎng)關(guān)轉(zhuǎn)發(fā)訪問(wèn)headers接口來(lái)做比較

4.通過(guò)觀察響應(yīng)結(jié)果可以看到,經(jīng)過(guò)網(wǎng)關(guān)轉(zhuǎn)發(fā)后會(huì)攜帶額外的請(qǐng)求頭信息,例如,我測(cè)試工程中使用的zuul網(wǎng)關(guān),會(huì)攜帶x-forwarded-prefix來(lái)標(biāo)識(shí)當(dāng)前微服務(wù)的路徑前綴,猜測(cè)在其它的微服務(wù)網(wǎng)關(guān)中如Spring Cloud Gateway等,也會(huì)攜帶相應(yīng)的請(qǐng)求頭來(lái)標(biāo)識(shí)經(jīng)過(guò)網(wǎng)關(guān)的轉(zhuǎn)發(fā)信息,就可以以此請(qǐng)求頭信息為依據(jù)來(lái)判斷請(qǐng)求的來(lái)源了
使用方式
了解了工作原理,我們就可以在微服務(wù)中,通過(guò)檢測(cè)Http請(qǐng)求中相關(guān)的請(qǐng)求頭來(lái)判斷請(qǐng)求來(lái)源啦

另外,在zuul中,可以通過(guò)實(shí)現(xiàn)自定義的過(guò)濾器,來(lái)注入自定義的header請(qǐng)求頭


那么在微服務(wù)中就可以順理成章的檢測(cè)自定義的header值,來(lái)判斷請(qǐng)求來(lái)源啦~
