天天看點

Asp.Net Core API網關Ocelot

Asp.Net Core API網關Ocelot

首先,讓我們簡單了解下什麼是API網關?

      API網關是一個伺服器,是系統的唯一入口。從面向對象設計的角度看,它與外觀模式類似。API網關封裝了系統内部架構,為每個用戶端提供一個定制的API。它可能還具有其它職責,如身份驗證、監控、負載均衡、緩存、請求分片與管理、靜态響應處理。

    API網關方式的核心要點是,所有的用戶端和消費端都通過統一的網關接入微服務,在網關層處理所有的非業務功能。通常,網關也是提供REST/HTTP的通路API。服務端通過API-GW注冊和管理服務。

其次,我們了解下Ocelot架構

 Ocelot的目标是使用.NET運作微服務/面向服務架構,我們需要一個統一的入口進入我們的服務,提供監控、鑒權、負載均衡等機制,也可以通過編寫中間件的形式,來擴充Ocelot的功能。  Ocelot是一堆特定順序的中間件。

接下來,我們就針對Ocelot的具體用法展開介紹。

這裡使用的Ocelot版本為2.0,.Net Core版本2.0

1、搭建Asp.net Core WebApi項目,引用Ocelot.dll。

Asp.Net Core API網關Ocelot

Nuget控制台,執行Ocelot安裝。

  

  2、修改Startup程式。

3、配置Ocelot。

我們建立一個名為configuration的json檔案,配置如下:

在這裡,我們配置了兩個服務,端口分别為8801和8802的。

Ocelot支援負載均衡(提供輪詢、最少通路)。Ocelot大部分功能,都可以通過中間件來完成,也可以實作和重寫中間件。

Ocelot原理非常簡單,這裡的配置檔案,展現了上遊請求和下遊服務間的映射關系,你可以了解為,上遊是用戶端直接調用的URL ,下遊,則是對應我們開發的服務。

4、新增兩個WebApi項目,分别為APIUserServiec和APIProductService。

API服務

端口(Port)

APIUserServiec

8801

APIProductService

8802

解決方案如下:

Asp.Net Core API網關Ocelot

5、配置VS啟動端口:

Asp.Net Core API網關Ocelot

依次類推,分别設定端口。

6、啟動項目。

配置多個項目啟動。

Asp.Net Core API網關Ocelot

F5啟動項目。

Asp.Net Core API網關Ocelot

再通過API網關,通路商品服務:http://localhost:5000/api/product。

Asp.Net Core API網關Ocelot

常見問題:

首次在啟動API網關時,觸發以下錯誤。

Sequence contains no matching element

Asp.Net Core API網關Ocelot

根據錯誤詳細資訊,可知原因是由于系統調用AddIdentityServer方法時,觸發異常。

Asp.Net Core API網關Ocelot

剛開始,懷疑是配置檔案configuration.json檔案配置導緻的,Ocelot2.0版,采用官方配置仍然觸發該異常,由此排除這種可能。接下來,直接從github上克隆源代碼,檢視。

Asp.Net Core API網關Ocelot

找到觸發錯誤的地方,

這就代碼觸發了錯誤,是由于表達式條件不成立,導緻First發生異常,這就簡單了,我們修改Main函數,

把這句代碼:

改成:

這樣,就解決了問題,API網關啟動成功。另外,官方例子https://github.com/TomPallister/Ocelot/blob/develop/test/Ocelot.ManualTest/Program.cs中,寫法是正确的,大家自己寫的時候,注意把IWebHostBuilder換成var會引發錯誤。

這樣,使用Ocelot架構搭建API網關的工作已經完成,嘗試通過通路API網關,來通路下遊的服務。

歡迎大家一起研究探讨,開啟你的微服務之路。

繼續閱讀