日韩性视频-久久久蜜桃-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 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET Core微服务之基于Ocelot实现API网关服务 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、啥是API網(wǎng)關(guān)?

  API 網(wǎng)關(guān)一般放到微服務(wù)的最前端,并且要讓API 網(wǎng)關(guān)變成由應(yīng)用所發(fā)起的每個(gè)請(qǐng)求的入口。這樣就可以明顯的簡(jiǎn)化客戶(hù)端實(shí)現(xiàn)和微服務(wù)應(yīng)用程序之間的溝通方式。以前的話,客戶(hù)端不得不去請(qǐng)求微服務(wù)A(假設(shè)為Customers),然后再到微服務(wù)B(假設(shè)為Orders),然后是微服務(wù)C(假設(shè)為Invoices)。客戶(hù)端需要去知道怎么去一起來(lái)消費(fèi)這三個(gè)不同的service。使用API網(wǎng)關(guān),我們可以抽象所有這些復(fù)雜性,并創(chuàng)建客戶(hù)端們可以使用的優(yōu)化后的端點(diǎn),并向那些模塊們發(fā)出請(qǐng)求。API網(wǎng)關(guān)的核心要點(diǎn)是:所有的客戶(hù)端和消費(fèi)端都通過(guò)統(tǒng)一的網(wǎng)關(guān)接入微服務(wù),在網(wǎng)關(guān)層處理所有的非業(yè)務(wù)功能(比如驗(yàn)證、鑒權(quán)、監(jiān)控等等)。

  關(guān)于API網(wǎng)關(guān),個(gè)人覺(jué)得園友楊曉東的這篇文章《談?wù)勎⒎?wù)中的API網(wǎng)關(guān)》值得一讀。微服務(wù)架構(gòu)中的任何一個(gè)環(huán)節(jié),都是可以說(shuō)很久的,而我沒(méi)有太多經(jīng)驗(yàn),也就不多談了。

二、開(kāi)源項(xiàng)目:Ocelot

  Ocelot是一個(gè)使用.NET Core平臺(tái)上的一個(gè)API Gateway,這個(gè)項(xiàng)目的目標(biāo)是在.NET上面運(yùn)行微服務(wù)架構(gòu)。Ocelot框架內(nèi)部集成了IdentityServer(身份驗(yàn)證)和Consul(服務(wù)注冊(cè)發(fā)現(xiàn)),還引入了Polly(上一篇博文中提到過(guò))來(lái)處理進(jìn)行故障處理。目前,騰訊和微軟是Ocelot在官網(wǎng)貼出來(lái)的客戶(hù),我想也是因?yàn)檫@兩家公司都是巨頭,所以要標(biāo)榜一下,哈哈。

  Ocelot github :?https://github.com/TomPallister/Ocelot

三、快速開(kāi)始第一個(gè)API網(wǎng)關(guān)

3.1 安裝Ocelot

NuGet>Install-Package Ocelot  

3.2 快速準(zhǔn)備兩個(gè)API服務(wù)

  (1)準(zhǔn)備一個(gè)ClientService

  

  創(chuàng)建一個(gè)ASP.NET Core WebAPI程序,保留默認(rèn)ValuesController,做一下修改:

?

  (2)準(zhǔn)備一個(gè)ProductService

  

  創(chuàng)建一個(gè)ASP.NET Core WebAPI程序,保留默認(rèn)ValuesController,做一下修改:

3.3 靜態(tài)配置兩個(gè)API服務(wù)

  (1)新建一個(gè)json文件:eg.configuration.json

  首先,一個(gè)最基本的配置文件如下:

{"ReRoutes": [],"GlobalConfiguration": {"BaseUrl": "https://api.mybusiness.com"} }

  這里特別注意一下BaseUrl是我們外部暴露的Url,比如我們的Ocelot運(yùn)行在http://123.111.11.1的一個(gè)地址上,但是前面有一個(gè)Nginx綁定了域名http://api.edisonchou.cn,那這里我們的BaseUrl就是 http://api.edisonchou.cn。現(xiàn)在我們的實(shí)驗(yàn)環(huán)境不存在這個(gè)條件,所以我們暫時(shí)不需要配置這個(gè)option。下面我們根據(jù)模板將剛剛創(chuàng)建并啟動(dòng)的兩個(gè)Service的信息進(jìn)行了配置:

  其中,我們得了解一下微服務(wù)架構(gòu)中的上游服務(wù)器和下游服務(wù)器,一般下游服務(wù)器指的是提供API服務(wù)的REST Service Server(比如WebAPI、WCF App等),而上游服務(wù)器則指的是提供Web網(wǎng)頁(yè)服務(wù)的Web Server(比如MVC Application,可能需要訪問(wèn)REST Service)。那么,這里我們可以了解到:

  • Downstream 是下游服務(wù)配置 => 即我們剛剛創(chuàng)建的提供API服務(wù)的配置,我們會(huì)指定PathTemplate,Host和Port等信息(具體調(diào)哪一臺(tái)服務(wù)器是由我說(shuō)了算)

  • UpStream 是上游服務(wù)配置 => 即服務(wù)消費(fèi)方(eg.MVC Server, SPA App)的調(diào)用配置(你要怎么按照什么URL格式和什么HTTP類(lèi)型調(diào)用我才能理解)

  通過(guò)配置文件,我們可以猜測(cè)Ocelot的實(shí)現(xiàn)原理大致應(yīng)該就是把客戶(hù)端對(duì)網(wǎng)關(guān)的請(qǐng)求(Request),按照configuration.json的映射配置,轉(zhuǎn)發(fā)給對(duì)應(yīng)的后端http service,然后從后端http service獲取響應(yīng)(Response)后,再返回給客戶(hù)端。當(dāng)然,具體細(xì)節(jié)應(yīng)該十分復(fù)雜,等后面有時(shí)間深入看看實(shí)現(xiàn)機(jī)制。

  其他不再解釋,可以看明白,另外,需要對(duì)這個(gè)配置文件進(jìn)行以下設(shè)置:為了確保直接運(yùn)行時(shí)能夠找到這個(gè)configuration.json文件

  

  *.通過(guò)配置文件可以完成對(duì)Ocelot的功能配置:路由、服務(wù)聚合、服務(wù)發(fā)現(xiàn)、認(rèn)證、鑒權(quán)、限流、熔斷、緩存、Header頭傳遞等。在配置文件中包含兩個(gè)根節(jié)點(diǎn):ReRoutes和GlobalConfiguration。ReRoutes是一個(gè)數(shù)組,其中的每一個(gè)元素代表了一個(gè)路由,我們可以針對(duì)每一個(gè)路由進(jìn)行以上功能配置。

  (2)改寫(xiě)Program和StartUp類(lèi),才能正常使用Ocelot

  ①在Program類(lèi)的BuildWebHost中讓程序讀取configuration.json文件

 ②在StartUp類(lèi)中為Ocelot注入配置,并啟動(dòng)Ocelot

3.3 測(cè)試一下

  (1)先啟動(dòng)ClientService和ProductService => 也可以通過(guò)在VS中更改啟動(dòng)順序來(lái)指定

  

  (2)再啟動(dòng)APIGateway,在瀏覽器中直接訪問(wèn)API網(wǎng)關(guān)所在的地址和端口(這里是192.168.2.231:8800)進(jìn)行測(cè)試:先請(qǐng)求ClientService,再請(qǐng)求ProductService,可以看到API網(wǎng)關(guān)對(duì)請(qǐng)求進(jìn)行了轉(zhuǎn)發(fā),服務(wù)消費(fèi)方不需要記住每個(gè)service所在的IP和端口,而是只需要告訴網(wǎng)關(guān)我需要消費(fèi)哪個(gè)service即可。

  

  

  *.tip:這里配置的PathTemplate大小寫(xiě)不敏感,可以選擇通過(guò)設(shè)置ReRouteIsCaseSensitive:true來(lái)實(shí)現(xiàn)大小寫(xiě)敏感

  到這里,第一個(gè)API網(wǎng)關(guān)的實(shí)現(xiàn)就結(jié)束了,但是對(duì)于眾多的微服務(wù),如果我們都一一硬編碼地配置其IP和Port在配置文件中,不適合微服務(wù)架構(gòu)的風(fēng)格,因?yàn)楸姸嗟姆?wù)地址變化會(huì)讓靜態(tài)配置的工作變得越來(lái)越大。因此,我們學(xué)習(xí)了服務(wù)發(fā)現(xiàn),那么是否可以結(jié)合服務(wù)發(fā)現(xiàn)呢?Ocelot + Consul的方式為我們給出了答案。

四、Ocelot+Consul的結(jié)合

4.1 實(shí)驗(yàn)節(jié)點(diǎn)部署結(jié)構(gòu)

  這里仍然采用之前的Consul實(shí)驗(yàn)集群,三個(gè)Consul Server節(jié)點(diǎn)(1個(gè)leader,2個(gè)follwer),一個(gè)Consul Client節(jié)點(diǎn)(部署了兩個(gè)服務(wù)ClientService和ProductService),以及一個(gè)API網(wǎng)關(guān)節(jié)點(diǎn)(基于Ocelot)。

4.2 啟動(dòng)Consul

  啟動(dòng)方式以及步驟這里不再贅述,如不了解請(qǐng)瀏覽我的前兩篇博文《.NET Core微服務(wù)之基于Consul實(shí)現(xiàn)服務(wù)治理》以及《.NET Core微服務(wù)之基于Consul實(shí)現(xiàn)服務(wù)治理(續(xù))》。這里可以看到,我們已經(jīng)成功地注冊(cè)了ClientService和ProductService。

4.3 啟動(dòng)API Gateway

  (1)為了適配Consul服務(wù)發(fā)現(xiàn),減少服務(wù)IP和Port的hard-code,我們需要改一下配置文件:

  Ocelot提供了基本的負(fù)載均衡選項(xiàng)(LoadBalanceOptions):輪詢(xún)和最小連接數(shù),如果我們部署了多個(gè)一樣的服務(wù),那么我們?cè)O(shè)置一個(gè)選項(xiàng)。

  (2)其他代碼無(wú)須更改,對(duì)于基本用法,我們要做的基本只是對(duì)配置文件的修改。配置完成后,即可啟動(dòng)API網(wǎng)關(guān)項(xiàng)目。

4.4 測(cè)試

  (1)請(qǐng)求ClientService

  

  (2)請(qǐng)求ProductService

  

五、小結(jié)

  本篇介紹了API網(wǎng)關(guān)的基礎(chǔ)概念以及一個(gè)基于適合于.NET Core的開(kāi)源項(xiàng)目Ocelot,并通過(guò)兩個(gè)小案例(一個(gè)靜態(tài)配置服務(wù),一個(gè)結(jié)合Consul服務(wù)發(fā)現(xiàn))來(lái)了解了API網(wǎng)關(guān)的作用和Ocelot的最基礎(chǔ)的用法。下一篇會(huì)繼續(xù)Ocelot的一些比較有用的功能(比如:限流、熔斷、緩存,以及結(jié)合Swagger),繼續(xù)做一些實(shí)踐,也希望到時(shí)可以總結(jié)下來(lái)與各位園友分享。

參考資料

楊曉東,《談?wù)勎⒎?wù)中的API網(wǎng)關(guān)》

桂素偉,《Ocelot + Consul實(shí)踐》

楊中科,《.NET微服務(wù)直播課課件pdf》

李朝強(qiáng),《ASP.NET Core API網(wǎng)關(guān)Ocelot》

jesse 騰飛,《.NET Core開(kāi)源API網(wǎng)關(guān) – Ocelot中文文檔》

Ocelot官網(wǎng):https://github.com/ThreeMammals/Ocelot?=>?tip:?張善友大隊(duì)長(zhǎng)為主要貢獻(xiàn)者之一

Ocelot官方文檔:http://ocelot.readthedocs.io/en/latest/index.html

相關(guān)文章:

  • .NET Core微服務(wù)之基于Consul實(shí)現(xiàn)服務(wù)治理

  • .NET Core微服務(wù)之基于Consul實(shí)現(xiàn)服務(wù)治理(續(xù))

  • .NET Core微服務(wù)之基于Polly+AspectCore實(shí)現(xiàn)熔斷與降級(jí)機(jī)制

原文地址: http://www.cnblogs.com/szlblog/p/9164419.html


.NET社區(qū)新聞,深度好文,歡迎訪問(wèn)公眾號(hào)文章匯總 http://www.csharpkit.com

總結(jié)

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

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