1. 程式人生 > >Ocelot簡易教程(六)之重寫配置檔案儲存方式並優化響應資料

Ocelot簡易教程(六)之重寫配置檔案儲存方式並優化響應資料

本來這篇文章在昨天晚上就能釋出的,悲劇的是寫了兩三千字的文章居然沒儲存,結果我懵逼了。今天重新來寫這篇文章。今天我們就一起來探討下如何重寫Ocelot配置檔案的儲存方式以及獲取方式。

很多人都說配置檔案的配置很繁瑣,如果儲存在資料庫就方便很多,可以通過自定義UI介面在後臺進行路由的配置,然後通過呼叫Administration API讓修改後的路由規則立即生效。當然這都是後話了。今天就教你手把手的來把配置檔案放到資料庫中,然後在資料庫中進行路由的配置。當然,我會在Github上開放原始碼供大家參考。至於Nuget包的話,今天還沒來得及弄,等明天晚上弄好,再發布Nuget包吧,今天先引用下原始碼來使用吧。大家委屈一下吧。本文還是沿用之前的系列文章裡面的Demo。所以可以先下載之前系列文章裡面的Demo原始碼。

https://github.com/yilezhu/OcelotDemo

例項教程整合步驟

專案新增進來後的結構如下所示:

1540302716406

  1. OcelotDemo閘道器專案作如下修改,Programs.cs檔案移除對Ocelot.json檔案的引用,因為配置檔案的獲取方式已經改成了從資料庫中獲取,所以,你需要新建一個數據庫,然後執行資料庫指令碼建立資料庫表,這裡只給出Mssql的資料庫指令碼https://github.com/yilezhu/Ocelot.ConfigAuthLimitCache/blob/master/Ocelot.sql ,在專案原始碼下面,大家自行下載。

  2. ConfigureServices服務中Ocelot的注入的同時需要注入我們的擴充套件方法,如下所示:

    services.AddOcelot()//注入Ocelot服務
                        .AddAuthLimitCache(option=> {
                            option.DbConnectionStrings = "Server=.;Database=Ocelot;User ID=sa;Password=1;";
                        })
                        .AddConsul();

    注意:這裡需要傳入SqlServer的資料庫連線字串,由於博主擴充套件使用的Dapper+MSSQL所以這裡需要傳入步驟1中建立的資料庫的連結字串。

  3. 我們在資料庫中配置一個路由吧,如下所示:欄位名稱基本都是跟Ocelot原生配置名稱一樣,只是擴充套件了一些欄位方便後期做限流的

    1540303270834

    大家看到沒有,這條路由的意思是接受/ss1/{萬用字元} 的路由,然後轉到到下面就是/api/{萬用字元} 。

  4. 路由配置好了,那就讓我們啟動一下專案看下效果吧。

    1540303513128

  5. 上面是正常的訪問結果,當我們訪問一個錯誤的路由的時候,再看看吧。

    1540304187258

    看到沒有,返回了404的狀態碼,感覺不夠友好,所以,我們也進行了改造。直接看結果吧

  6. 為了看到效果,你需要在Configure中少做下修改

     app.UseAhphOcelot().Wait();
  7. 然後我們重新啟動下Ocelot閘道器專案,重新訪問下6中的Url吧。

    1540304235799

    看到沒有,返回的資料更友好,而且是200的狀態。當然大家也可以忽略這個功能哈。

原始碼地址:

總結

本文主要通過例項講述如何整合,將配置檔案儲存到資料庫的外掛。原始碼已經開源,今天暫時沒有釋出Nuget包,明天再發布吧。當然你可以自行擴充套件程式碼。實現你自己的業務。我把配置檔案儲存到資料庫的目的就是方便後面做UI管理方便,還有就是可以基於這些路由在資料庫中對每個客戶端進行單獨的限流。最後感謝大家的閱讀。

Ocelot簡易教程目錄