Ocelot中使用Butterfly實踐

2022-02-02 09:50:19 字數 2091 閱讀 3489

ocelot(是乙個用.net core實現的api閘道器,butterfly(是用.net core實現的全程式跟蹤,現在,ocelot中可以使用butterfly了,關於ocelot和butterfly具體功能參見各自的github站點,關於ocelot和butterfly組合實現,引數張善友部落格本篇部落格講述乙個案例的實現。

專案說明表:

專案名稱

專案型別

埠說明ocelotgateway

web api

閘道器專案

api001

web api

業務api專案

api002

web api

業務api專案

testapi

web api

測試api專案

ocelot類庫無

butterfly-web-preview-0.0.8

web api

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

開啟http://localhost:9618

檢視traces

可以通過traces第二張圖請求的上下級序順可以看到與我們上面分析的請求路徑一致。

檢視dependencies

如果dependencies中把雙箭頭改成兩個單箭頭,加上求步驟序列編號就更清晰了。

使用Ocelot做閘道器

1首先建立乙個json的配置檔案,檔名隨便取,我取ocelot.json 這個配置檔案有兩種配置方式,第一種,手動填寫 服務所在的ip和埠 第二種,用consul進行服務發現 第一種如下 手動指明ip和埠號 downstreamhostandports 請求格式 例如,我的ocelot ip是127...

Ocelot的使用 基本使用

ocelot是在.net core下閘道器的實現類庫,通過ocelot可以統一管理我們的webapi,不用再 中調來調去的很多api位址,統一從閘道器呼叫就行了。記錄下如何簡單的使用ocelot 1.新建gateway的閘道器專案,以及webapi的示例專案service1和service2 在ga...

使用 Ocelot 匹配路由的方法匹配路由

之前我們在 ocelot 閘道器的基礎上自定義了乙個認證授權的 ocelot 中介軟體,根據請求的路徑和 method 進行匹配,找到對應的許可權配置,並判斷是否可以擁有訪問資源的角色,如果沒有則返回 401 403,如果有許可權則 到下游服務。原來的匹配方式是首先根據請求路徑和方法完全匹配,如果匹...