日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

asp.net core系列 59 Ocelot 构建基础项目示例

發布時間:2025/3/20 asp.net 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 asp.net core系列 59 Ocelot 构建基础项目示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.入門概述

  從這篇開始探討Ocelot,Ocelot是一個.NET API網關,僅適用于.NET Core,用于.NET面向微服務/服務的架構中。當客戶端(web站點、ios、 app 等)訪問web api時,需要先統一入口點進入Ocelot網關(Ocelot可以做很多事情例如路由,身份驗證,服務發現,日志記錄等,下面列出了功能基本),再由Ocelot分發到web api。Ocelot官方希望IS4一起使用,實現令牌輕松集成。

  Ocelot是一組按特定順序排列的中間件,查看源碼會發現Ocelot是一堆的middleware組成的一個管道。

  Ocelot操控HttpRequest對象到其配置指定的狀態,在中間件中Ocelot創建一個HttpRequestMessage對象,該對象用于向下游服務(wep api)發出請求。發出請求的中間件是Ocelot管道中的最后一件事。它不會調用下一個中間件。

  當下游服務response返回Ocelot管道時,將檢索下游服務的響應。有一個中間件將HttpResponseMessage映射到HttpResponse對象并返回給客戶端。

?

  通過官方部署架構圖介紹,可以了解到:Ocelot有5種部署方式包括:

??????   (1) Ocelot基本實現

?????  ? (2) Ocelot結合IS4、

????  ?? (3) Ocelot多個實現(高可用,負載)

?????  ? (4) Ocelot結合Consul(健康檢查,服務注冊)、

????  ?? (5) Ocelot結合Service Fabric。

  查看部署架構圖,在架構圖中,Ocelot網關暴露在廣域網的一個訪問入口,供客戶端調用。而web api是在局域網中,由Ocelot來轉發。

?

  Ocelot的功能基本包括:

?????????????????? 路由

?????????????????? 請求聚合

?????????????????? Consul和Eureka的服務發現

?????????????????? Service Fabric

?????????????????? WebSockets

? ? ? ? ? ? ? ? ? ?Authentication認證

?????????????????? Authorisation授權

?????????????????? 限速

?????????????????? 高速緩存

?????????????????? 重試策略/ QoS

?????????????????? 負載均衡

?????????????????? 日志/跟蹤/關聯

?????????????????? 標頭/查詢字符串/聲明轉換

?????????????????? 自定義中間件/委托處理程序

?????????????????? 配置/管理REST API

?????????????????? Platform / Cloud Agnostic

?

???????? 安裝Nuget包

???????? ???????? Install-Package?Ocelot

?

二.Ocelot?基礎項目演示

  下面通過貢獻者的開源項目來學習Ocelot,掌握一個基礎項目應用,學習起來也更直觀。示例有三個項目:一個是網關APIGateway項目,有二個是web api服務。 項目實現的功能是:客戶端統一通過網關作為入口點訪問,實現路由的功能。github開源地址? ?架構如下圖所示:

  

  2.1 CustomersAPIServices項目

    該項目是一個web api項目,用來處理客戶事務的API服務。該地址為http://localhost:9001, 可以在“項目選項”中指定url,也可以在Host啟動時配置。

    (1) Program類添加UseUrls

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>WebHost.CreateDefaultBuilder(args).UseStartup<Startup>().UseUrls("http://*:9001");

    (2)CustimersAPIServices項目中創建一個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}";} }

?

?  2.2 ProductsAPIServices項目?

    該項目是一個web api項目,處理產品某事的API服務。該地址為http://localhost:9002, 可以在“項目選項”中指定url,也可以在Host啟動時配置。

    (1) Program類添加UseUrls

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>WebHost.CreateDefaultBuilder(args).UseStartup<Startup>().UseUrls("http://*:9002");

    (2) 在ProductsAPIServices項目中創建ProductsController

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

?

  2.3 APIGateway項目

    該項目是Ocelot網關項目,先安裝Ocelot包。在項目中添加一個Ocelot的json配置文件,這里創建的是configuration.json文件。

    (1) configuration.json(配置Ocelot)

{//ReRoutes:處理上游請求的對象(客戶端),每個數組{} 就是配置:上游地址和對應下游地址"ReRoutes": [{//以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": "/api/products","UpstreamHttpMethod": [ "Get" ]}],//全局配置,允許覆蓋ReRoutes特定設置"GlobalConfiguration": {"RequestIdKey": "OcRequestId","AdministrationPath": "/administration"} }

    (2) Startup類,使用Ocelot

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

?  ?

  最后開始測試:

    (1) 啟動CustomersAPIServices web api服務程序 http://localhost:9001

    (2) 啟動ProductsAPIServices web api服務程序? http://localhost:9002

    (3) 啟動 APIGateway 網關服務程序? http://localhost:9000

    

?

三. 關于ReRoutes路由介紹

  在上面示例中,使用了基本的路由配置,在ocelot路由配置中,還有許多特性,比如:   

  (1) 給DownstreamPathTemplate和UpstreamPathTemplate設置占位符,來捕捉所有類型的ReRoute,是使用直接代理。

  (2) 設置上游(客戶端)的主機頭來匹配?"UpstreamHost": "somedomain.com"。

  (3) 設置路由的優先級,Priority的數字越高代表級別越高。

  (4) 設置動態路由,不必提供ReRoute配置。

  (5) 設置查詢字符串,根據url的參數unitId={unitId}來匹配轉發。

  

?

參考文獻

  構建基礎Ocelot項目介紹

?  官方文檔

  

  

?

轉載于:https://www.cnblogs.com/MrHSR/p/10755112.html

總結

以上是生活随笔為你收集整理的asp.net core系列 59 Ocelot 构建基础项目示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。