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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

.NET Core + Ocelot:API 网关

發(fā)布時(shí)間:2023/12/4 asp.net 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET Core + Ocelot:API 网关 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

關(guān)于 API 網(wǎng)關(guān)的作用,核心是 API 請(qǐng)求的收口及控制,如:鑒權(quán)、限流、熔斷、數(shù)據(jù)緩存 等都是開(kāi)發(fā)中常見(jiàn)的需求,將此類需求交給網(wǎng)關(guān)層處理,可以使每個(gè)微服務(wù)更聚焦于業(yè)務(wù)功能開(kāi)發(fā),同時(shí)也可為下游服務(wù)的安全及穩(wěn)定性保駕護(hù)航。

在之前的文章 ?.NET Core + Spring Cloud:API 網(wǎng)關(guān) 有介紹過(guò)如何基于 Spring Cloud 中的 Zuul 實(shí)現(xiàn) API 網(wǎng)關(guān),功能實(shí)現(xiàn)上拋開(kāi)不提,另外一個(gè)較大的特點(diǎn)是 .NET Core 可以完美的擁抱 Java 體系中的部分能力。本文將主要介紹 .NET Core 體系中的 API 網(wǎng)關(guān)框架:Ocelot[1],它包含了 路由、鑒權(quán)、限流、熔斷、服務(wù)發(fā)現(xiàn)、請(qǐng)求聚合等非常豐富的功能,這些功能大多基于少量的配置實(shí)現(xiàn),使用起來(lái)也并不復(fù)雜。

接下來(lái)通過(guò)簡(jiǎn)單例子先跑起來(lái),然后再繼續(xù)延伸更多特性的介紹,下面是 Ocelot 官方給出的一個(gè)最基礎(chǔ)的架構(gòu)圖:

外網(wǎng)訪問(wèn) Ocelot API 網(wǎng)關(guān)服務(wù)(單例),通過(guò)配置的規(guī)則(configuration.json),路由到下游的兩個(gè)微服務(wù)實(shí)例(Http Service),這也就是最基本的轉(zhuǎn)發(fā)能力。

路由轉(zhuǎn)發(fā)

以下創(chuàng)建的 .NET Core API 服務(wù)均基于 .NET Core 3.1

  • 創(chuàng)建微服務(wù)(ServiceA),并啟動(dòng)2個(gè)實(shí)例,兩個(gè)實(shí)例使用的配置文件設(shè)置不同的 Id,方便后面接口調(diào)用識(shí)別不同實(shí)例。

    [Route("[controller]/[action]")] [ApiController] public class TestController : ControllerBase {public readonly IConfiguration _configuration;public TestController(IConfiguration configuration){_configuration = configuration;}[HttpGet]public string Get(){return $"service-a {_configuration["Id"]}";} }
  • 創(chuàng)建網(wǎng)關(guān)服務(wù)

    • 安裝 Ocelot NuGet 包;

    • 創(chuàng)建配置文件 configuration.json,內(nèi)容如下:

      {"Routes": [ // 路由規(guī)則定義,數(shù)組{"DownstreamPathTemplate": "/{url}", // 下游路徑匹配模板"DownstreamScheme": "http","DownstreamHostAndPorts": [ // 下游服務(wù)的 host 和 port 設(shè)置,支持多實(shí)例{"Host": "192.168.124.11","Port": 8000},{"Host": "192.168.124.11","Port": 8001}],"UpstreamPathTemplate": "/servicea/{url}", // 客戶端訪問(wèn)地址路徑匹配模板"UpstreamHttpMethod": [ "Get" ], // 支持的 HttpMethod ,如:Get、Post、Put、Delete 等"LoadBalancerOptions": { // 多實(shí)例下負(fù)載均衡方式,支持:LeastConnection(最閑)、RoundRobin(輪詢)、NoLoadBalance"Type": "RoundRobin"}}] }
    • 在 Program.cs 中添加 Ocelot 配置文件引用

      public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();webBuilder.UseUrls("http://*:9600");webBuilder.ConfigureAppConfiguration(c =>{c.AddJsonFile("configuration.json");});});
    • 在 Startup.cs ?中注冊(cè)服務(wù)與管道配置

      public void ConfigureServices(IServiceCollection services) {services.AddControllers();services.AddOcelot(); }public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {// ....app.UseOcelot().Wait();app.UseRouting();app.UseEndpoints(endpoints =>{endpoints.MapControllers();}); }
    • 網(wǎng)關(guān)層接口調(diào)用測(cè)試 通過(guò)以上服務(wù)搭建,就完成了路由轉(zhuǎn)發(fā)的功能,即當(dāng)訪問(wèn) /servicea/{任意路由地址} 都將自動(dòng)轉(zhuǎn)發(fā)到下游任意一個(gè)服務(wù)實(shí)例中相匹配的路由地址,網(wǎng)關(guān)服務(wù)訪問(wèn)地址為:http://192.168.124.11:9600(192.168.124.11 是本機(jī)的 IPV4 地址),測(cè)試效果如下(下游服務(wù)實(shí)例被輪詢?cè)L問(wèn)):

    • 服務(wù)發(fā)現(xiàn)(Consul)

      Ocelot 支持與具備 服務(wù)發(fā)現(xiàn)[2] 功能的一些框架相結(jié)合,如:Consul、Eureka,下游服務(wù)地址可直接從服務(wù)注冊(cè)中心進(jìn)行獲取。接下來(lái)將結(jié)合 Consul 進(jìn)行測(cè)試,有關(guān) Consul 與 .NET Core 結(jié)合請(qǐng)參考文章:.NET Core + Consul 服務(wù)注冊(cè)與發(fā)現(xiàn) ,這部分內(nèi)容這里就不重復(fù)介紹了,最終注冊(cè)中心 service-a 有兩個(gè)實(shí)例,如下:

    • 安裝 Ocelot.Provider.Consul NuGet 包;

    • Startup.cs 中進(jìn)行服務(wù)注冊(cè):

      services.AddOcelot().AddConsul();
    • configuration.json 配置修改為如下:

      {"GlobalConfiguration": {"ServiceDiscoveryProvider": { // 提供服務(wù)發(fā)現(xiàn)的 Provider"Scheme": "http","Host": "192.168.124.9", // Consul 服務(wù) host"Port": 8500, // Consul 服務(wù)端口"Type": "Consul" // 類型}},"Routes": [{"DownstreamPathTemplate": "/{url}","DownstreamScheme": "http","ServiceName": "service-a", // 注冊(cè)的服務(wù)名"UpstreamPathTemplate": "/servicea/{url}","UpstreamHttpMethod": [ "Get" ],"LoadBalancerOptions": {"Type": "RoundRobin"}}] }
    • 最終測(cè)試結(jié)果與上一部分一致,所以 Ocelot 完全可以與服務(wù)注冊(cè)發(fā)現(xiàn)相結(jié)合應(yīng)用到項(xiàng)目中。

      限流

      為了可以防止因請(qǐng)求過(guò)載而引起服務(wù)不穩(wěn)定,可為路由規(guī)則添加相應(yīng)的限流配置,如下:

      "RateLimitOptions": {"ClientWhitelist": [ "clientId1" ],"EnableRateLimiting": true,"Period": "5s","PeriodTimespan": 5,"Limit": 5 // 測(cè)試設(shè)置比較小 }

      ClientWhitelist:限流白名單。如上,當(dāng)請(qǐng)求頭中包含 ClientId=clientId1 的請(qǐng)求則不受限流規(guī)則控制(ClientId key 名可修改)EnableRateLimiting:開(kāi)啟限流Period:限流控制時(shí)間段,也就是多長(zhǎng)時(shí)間內(nèi)。支持 s(秒)、m(分)、h(小時(shí))、d(天)PeriodTimespan:超過(guò)限制次數(shù)后,需要等待的時(shí)長(zhǎng)(秒)Limit:在 Period 時(shí)長(zhǎng)內(nèi)最大訪問(wèn)次數(shù)

      當(dāng)超出限流數(shù)量時(shí),默認(rèn)返回如下:

      如果需要修改返回值及狀態(tài)碼等可以通過(guò)修改 GlobalConfiguration 配置中的 RateLimitOptions 參數(shù)。

      熔斷

      熔斷是結(jié)合 Polly 實(shí)現(xiàn)的,在使用之前需要先安裝 Ocelot.Provider.Polly NuGet 包,然后添加服務(wù)注冊(cè),如下:

      services.AddOcelot() .AddConsul().AddPolly();

      路由規(guī)則中增加如下配置:

      "QoSOptions": {"ExceptionsAllowedBeforeBreaking": 3,"DurationOfBreak": 5000,"TimeoutValue": 3000 }

      ExceptionsAllowedBeforeBreaking:允許連續(xù)發(fā)生異常次數(shù)DurationOfBreak:熔斷時(shí)長(zhǎng)(ms)TimeoutValue:請(qǐng)求超時(shí)時(shí)間(ms)

      當(dāng)超出允許異常次數(shù)時(shí),接口 5s 內(nèi)都會(huì)返回 503:

      網(wǎng)關(guān)高可用

      API 網(wǎng)關(guān)是所有請(qǐng)求的唯一入口,壓力自然是比較大的,自身的高可用也很關(guān)鍵,所以網(wǎng)關(guān)服務(wù)在部署上必須多實(shí)例,網(wǎng)關(guān)上層還需要添加一層 LB,官方架構(gòu)圖如下:

      Ocelot 整體主要圍繞配置進(jìn)行功能擴(kuò)充,本文只介紹了部分 Ocelot ?的功能,另外還有 鑒權(quán)、緩存、請(qǐng)求合并、與 Kubernetes 結(jié)合等都是非常普遍的功能。

      參考資料

      [1]

      Ocelot: https://github.com/ThreeMammals/Ocelot

      [2]

      服務(wù)發(fā)現(xiàn): https://ocelot.readthedocs.io/en/latest/features/servicediscovery.html

    總結(jié)

    以上是生活随笔為你收集整理的.NET Core + Ocelot:API 网关的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 天堂网av在线播放 | 久久国产精品首页 | 日韩一级在线 | 日本欧美一区二区 | 大尺度做爰床戏呻吟舒畅 | 亚洲女人天堂成人av在线 | 日本久久网 | 91丨porny丨在线中文 | 亚洲一区欧洲一区 | 日韩黄色片免费看 | 欧美人与zoxxxx另类 | 亚洲无吗一区二区三区 | 91av视频网| 中文字幕免费在线 | 久久综合久久综合久久综合 | 久久久久久久亚洲av无码 | 亚洲色鬼 | 蜜色av| 国产在线1 | 欧美久草视频 | 久久久6 | 奇米第四色影视 | 极品新婚夜少妇真紧 | 国产精品无圣光 | 我爱avav色aⅴ爱avav | 国产精品二区在线 | 精品久久久久久中文字幕 | 日日骚网 | 午夜日韩视频 | 狠狠热免费视频 | 午夜av成人| 亚洲精品一区在线 | 91亚洲网站 | 国产精品区一区二 | 欧美成人国产精品一区二区 | 四虎国产精品永久在线国在线 | 欧美一区二区大片 | 97精品人妻一区二区三区香蕉 | 亚洲综合第一 | 欧美日韩精品中文字幕 | 欧美一二区 | 久久精品在线视频 | 成人黄色片免费看 | 97视频在线观看免费高清完整版在线观看 | 四虎国产精品永久免费观看视频 | 五月婷婷社区 | 性免费网站 | 国产一区二区三区四区 | www.亚洲黄色 | 亚洲一级免费视频 | 精品国产乱码一区二区三 | 中国一级大黄大黄大色毛片 | 神马午夜国产 | 夜色一区二区 | 午夜精品亚洲 | 99视频在线精品免费观看2 | mm131丰满少妇人体欣赏图 | 免费a级黄色片 | 可以免费在线观看的av | 狼人综合视频 | 中文字幕成人 | 成年人免费观看网站 | 日韩中文av在线 | 奇米影视久久 | 91精品国产免费 | 99精品在线免费视频 | 亚洲AV成人无码精品久久盆瓶 | 午夜福利电影一区二区 | 美女少妇av| 国产成人精品自拍 | 爱射综合 | 国产精品-区区久久久狼 | 天堂在线免费观看视频 | 亚洲熟妇毛茸茸 | 成人午夜福利一区二区 | 欧美日韩中文国产 | 日韩免费一级 | 国产福利在线观看视频 | 国产在视频线精品视频 | 操操影视| 五月婷婷丁香花 | 欧美日韩高清一区二区 国产亚洲免费看 | 精品h| 国产福利一区二区三区在线观看 | 毛片网站入口 | 亚洲视频在线观看网站 | 国产精品人人爽人人爽 | 四虎国产在线观看 | 91在线精品秘密一区二区 | 欧美极品在线观看 | 午夜在线免费观看 | 一级在线观看 | 玩弄白嫩少妇xxxxx性 | 欧美爱爱网站 | 国产伦精品一区二区三区四区 | 成人快色| 中出视频在线观看 | 玖玖热视频 | 三女同志亚洲人狂欢 |