我們在做微服務時,有時候需要將微服務做一些限制,比如只能我們自己的服務調用,不能通過瀏覽器直接調用等。
具體的邏輯如下:
我們就可以使用spring cloud sleuth,在應用調用微服務時通過Tracer產生一個traceId,並通過request設置到header里面,
然后sleuth會將該traceId在整個鏈路傳遞,我們在微服務中定義一個攔截器,取到header里面的traceId並和鏈路中的traceId比較,
如果相等,則表明是我們自己的應用調用,攔截器通過,否則這次請求被攔截
代碼詳見github
https://github.com/devinzhang0209/interview_springcloud.git
一. 應用調用微服務,產生traceId
1. feign調用微服務,指定配置
2. FeignReqeustConfig中實例化攔截器用於生成traceId
3. 攔截器生成traceId並放到header里面
二 . 攔截器攔截到traceId並和鏈路中比較
1. 攔截器判斷traceId
2. 攔截器生效,只攔截微服務的請求(定義時定義微服務都是cloud開頭)