Ocelot(https://github.com/TomPallister/Ocelot)是一個用.net core實現的API網關,Butterfly(https://github.com/ButterflyAPM/butterfly)是用.net core實現的全程式跟蹤,現在,Ocelot中... ...
Ocelot(https://github.com/TomPallister/Ocelot)是一個用.net core實現的API網關,Butterfly(https://github.com/ButterflyAPM/butterfly)是用.net core實現的全程式跟蹤,現在,Ocelot中可以使用Butterfly了,關於Ocelot和Butterfly具體功能參見各自的github站點,關於Ocelot和Butterfly組合實現,參數張善友博客http://www.csharpkit.com/2018-02-04_51207.html,本篇博客講述一個案例的實現。
博客中代碼參見https://github.com/axzxs2001/Asp.NetCoreExperiment/tree/master/Asp.NetCoreExperiment/OcelotAndButterfly,可只下載下麵的項目進行測試。
項目說明表:
項目名稱 |
項目類型 |
埠 |
說明 |
OcelotGateway |
web api |
5000 |
網關項目 |
API001 |
web api |
5001 |
業務api項目 |
API002 |
web api |
5002 |
業務api項目 |
TestAPI |
web api |
5577 |
測試api項目 |
Ocelot |
類庫 |
無 |
Ocelot官方源碼,因為有個bug,以進行pr,所以現在把clone下載來作了個修複,後續官方會修正。 |
Butterfly-web-preview-0.0.8 |
Web api |
9618 |
Butterrfly執行程式,用來收集經過節點的數據,並作展示,可以過來http://localhost:9618來訪問 |
項目結構:
API001和API002本身代碼非常簡單,就是請求後返回一個帶時間的字元串,API001在返回前,會調用API002,因為有網關存在,所以在API001的實現方法是請求網關中的API002映射路徑的(詳見項目代碼),而不是直接訪問API002(因為在微服務集群中,API002應該有多個節點,這些節點通過服務註冊後才知道具體地址,所以在調用的時候,通過訪問網關的地址來達到訪問API002。
TestAPI中請求的是網關中的API001的映射(詳見項目代碼)
OcelotGateway中配置文件configuration.json中,開啟各ReRoutes中的HttpHandlerOptions下的UseTracing:true即可(詳見項目代碼)
需要引用butterfly.Client.AspNetCore項目有:API001,API002,OcelotGateway,TestAPI,現在butterfly.Client.AspNetCore版本是0.0.8,有bug(與作者聯繫後期版本會修正),可以引用0.0.7進行測試。
請求的路徑如下圖:
請求從TestAPI的URL:http://localhost:5577/api/values/1開始,TestAPI利用HttpClient請求網關URL:http://localhost:5000/api001/values,網關中會利用HttpClient轉配置中映射URL:http://localhost:5001/api/values,API001會利用HttpClient請求URL:http://localhost:5000/api002/values,網關中會利用HttpClient轉配置中映射URL:http://localhost:5002/api/values
需要啟動項目:
1、 用dotnet Butterfly.Web.dll --EnableHttpCollector=true啟動Butterfly-web-preview-0.0.8
2、 啟動OcelotGateway
3、 啟動API001
4、 啟動API002
查看Traces
可以通過Traces第二張圖請求的上下級序順可以看到與我們上面分析的請求路徑一致。
查看Dependencies
如果Dependencies中把雙箭頭改成兩個單箭頭,加上求步驟序列編號就更清晰了。