中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Ocelot路由如何在ASP.NET Core3.1 項目中實現

發布時間:2020-12-11 14:58:54 來源:億速云 閱讀:231 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關Ocelot路由如何在ASP.NET Core3.1 項目中實現,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

1.路由

Ocelot的主要功能是接收客戶端等傳入的HTTP請求,并將其轉發到下游服務。Ocelot當前僅以另一個http請求的形式支持此功能(將來可能是任何傳輸機制)。
Ocelot將一個請求路由到另一個請求。為了讓Ocelot正常工作,您需要在配置中設置一個Route。下面我們就Ocelot基礎項目構建簡單介紹下路由功能。

2.Ocelot基礎項目構建(APIGatewayBasicDemo)

現在我們根據GitHub貢獻者開源項目來學習Ocelot,根據下載下來Ocelot基礎項目結構來看,我們能看到有一個網關項目(APIGateway),一個客戶API項目(CustomersAPIServices),一個產品API項目(ProductsAPIServices)。如下圖所示:

Ocelot路由如何在ASP.NET Core3.1 項目中實現

2.1Ocelot網關配置

APIGateway網關項目根目錄下面有一個configuration.json配置文件,內容如下:

{
 //Routes:處理上游請求的對象(客戶端),每個數組{}就是配置:上游地址和對應下游地址
 "Routes": [
 {
  //以Downstream開頭的,是要轉發到下游服務器的地址(CustomersAPIServices),與nginx轉發類似
  //下面所有Downstream開頭的,組成一個轉發url,轉發地址是http://localhost:9001/api/customers
  "DownstreamPathTemplate": "/api/customers",
  "DownstreamScheme": "http",
  // "DownstreamHost": "localhost",
  // "DownstreamPort": 9001,
  //轉發到下游服務器的主機和端口。
  "DownstreamHostAndPorts": [
  {
   "Host": "localhost",
   "Port": 9001
  }
  ],
  //Upstream開頭是指上游服務器(客戶端)訪問地址,通過http get方式訪問。
  //也就是說客戶端訪問http://localhost:9000/customers 實際是轉發到了http://localhost:9001/api/customers的服務
  "UpstreamPathTemplate": "/customers",
  "UpstreamHttpMethod": [ "Get" ]
 },
 {
  "DownstreamPathTemplate": "/api/customers/{id}",
  "DownstreamScheme": "http",
  // "DownstreamHost": "localhost",
  // "DownstreamPort": 9001,
  "DownstreamHostAndPorts": [
  {
   "Host": "localhost",
   "Port": 9001
  }
  ],
  "UpstreamPathTemplate": "/customers/{id}",
  "UpstreamHttpMethod": [ "Get" ]
 },
 {
  "DownstreamPathTemplate": "/api/products",
  "DownstreamScheme": "http",
  // "DownstreamPort": 9002,
  // "DownstreamHost": "localhost",
  "DownstreamHostAndPorts": [
  {
   "Host": "localhost",
   "Port": 9002
  }
  ],
  "UpstreamPathTemplate": "/products",
  "UpstreamHttpMethod": [ "Get" ]
 }
 ],
 //全局配置,允許覆蓋Routes特定設置
 "GlobalConfiguration": {
 "RequestIdKey": "OcRequestId",
 "AdministrationPath": "/administration"
 }
}

下面我們就文件中這些屬性進行解釋:
DownstreamPathTemplate:下游路由服務地址。
DownstreamScheme:下游服務地址訪問協議類型http或者https。
DownstreamHostAndPorts:是一個數據集合,用于定義您希望將請求轉發到的任何下游服務的主機和端口。通常,它僅包含一個條目,但是有時您可能希望對下游服務進行負載均衡請求,Ocelot允許您添加多個條目,然后選擇一個負載均衡器。
UpstreamPathTemplate:上游服務地址,即下游服務真實訪問地址。
UpstreamHttpMethod:上游服務HTTP請求方式,例如Get、Post。
GlobalConfiguration:顧名思義就是全局配置,此節點的配置允許覆蓋Routes里面的配置,你可以在這里進行通用的一些配置信息。
在Ocelot中,您可以以{something}的形式將變量的占位符添加到模板中。占位符變量需要同時存在于DownstreamPathTemplate和UpstreamPathTemplate屬性中。當設置為Ocelot時,Ocelot將嘗試為每個請求Ocelot進程將UpstreamPathTemplate占位符中的值替換為DownstreamPathTemplate。例如上述/customers/{id}。

2.2網關項目中添加Ocelot支持

現在我們在網關項目中添加Ocelot支持,代碼如下:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
   WebHost.CreateDefaultBuilder(args)
    //.UseStartup<Startup>()
    //設置網關url
    .UseUrls("http://*:9000")
    .ConfigureAppConfiguration((hostingContext, config) =>
    {
     //添加Ocelot配置文件
config.SetBasePath(hostingContext.HostingEnvironment.ContentRootPath)
       .AddJsonFile("configuration.json")
       .AddEnvironmentVariables();
    })
    .ConfigureServices(s =>
    {
     //添加Ocelot服務
     s.AddOcelot();
    })
    .Configure(a =>
    {
     //使用Ocelot中間件
     a.UseOcelot().Wait();
    });

Ocelot的配置如上代碼基本完成了,下面我們看看一個基礎Ocelot路由正常工作流程。

2.3CustomersAPIServices和ProductsAPIServices項目

CustomersAPIServices項目的CustomersController有如下兩個方法:

[Route("api/[controller]")]
public class CustomersController : Controller
{  
 [HttpGet]
 public IEnumerable<string> Get()
 {
  return new string[] { "Catcher Wong", "James Li" };
 }

 [HttpGet("{id}")]
 public string Get(int id)
 {
  return $"Catcher Wong - {id}";
 }   
}

ProductsAPIServices項目的ProductsController有如下一個方法:

[Route("api/[controller]")]
public class ProductsController : Controller
{
 [HttpGet]
 public IEnumerable<string> Get()
 {
  return new string[] { "Surface Book 2", "Mac Book Pro" };
 }
}

2.4運行測試

上面這三個下游路由地址根據configuration.json配置文件都分別配置了上游分發地址,我們把這三個項目根據配置信息分別在IIS上部署起來,當然你們也可以使用dotnet run命令分別啟動這個三個項目。APIGateway、CustomersAPIServices、ProductsAPIServices項目綁定主機地址分別是http://localhost:9000、http://localhost:9001、http://localhost:9002。
當我們在瀏覽器上打開http://localhost:9000/customers時候,會發現瀏覽器上輸出如下信息:

Ocelot路由如何在ASP.NET Core3.1 項目中實現

為什么輸入網關主機地址,返回過來卻是客戶主機處理結果?那是因為當客戶端訪問上游服務http://localhost:9000/customers時候,Ocelot會根據配置信息中下游模版把請求分發到http://localhost:9001/api/Customers/Get去處理,然后返回結果。
而當我們打開http://localhost:9000/customers/1時候,也會輸出如下信息:

Ocelot路由如何在ASP.NET Core3.1 項目中實現

配置信息中上游模版/customers/{id}對應下游模版/api/customers/{id},當我們請求的路徑為http://localhost:9000/customers/1時候,Ocelot會根據配置信息分發到對應的下游路由http://localhost:9001/api/Customers/Get/1去處理,然后返回結果。
同理,當客戶端訪問上游服務http://localhost:9000/products時候,Ocelot也會分發到對應的下游路由http://localhost:9002/api/Products去處理,然后返回結果:

Ocelot路由如何在ASP.NET Core3.1 項目中實現

根據上面測試結果,也就是說我們的Ocelot已經在起作用了,而且根據上下游路由進行了映射。當然該章節也只是簡單介紹Ocelot路由功能,而configuration.json配置中有些屬性還沒有進行描述,例如負載均衡、限流,熔斷等等。下面我會繼續根據GitHub貢獻者開源項目繼續講解其功能。

上述就是小編為大家分享的Ocelot路由如何在ASP.NET Core3.1 項目中實現了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

淮滨县| 灵丘县| 定襄县| 穆棱市| 阿克| 济宁市| 囊谦县| 黑河市| 岳阳市| 梅州市| 石阡县| 奎屯市| 太仆寺旗| 麻栗坡县| 桦南县| 乌拉特后旗| 周口市| 南木林县| 依安县| 南雄市| 蓬安县| 东兴市| 石城县| 嘉善县| 武清区| 蒙自县| 固镇县| 汉中市| 武汉市| 张掖市| 宁安市| 抚州市| 日喀则市| 天台县| 华蓥市| 汤阴县| 茌平县| 青铜峡市| 嫩江县| 陆河县| 蒲城县|