.Net?Core微服務(wù)網(wǎng)關(guān)Ocelot基礎(chǔ)介紹及集成
網(wǎng)關(guān)是什么
簡(jiǎn)單來(lái)說(shuō),網(wǎng)關(guān)就是暴露給外部的請(qǐng)求入口。就和門衛(wèi)一樣,外面的人想要進(jìn)來(lái),必須要經(jīng)過(guò)門衛(wèi)。當(dāng)然,網(wǎng)關(guān)并不一定是必須的,后端服務(wù)通過(guò)http也可以很好的向客戶端提供服務(wù)。但是對(duì)于業(yè)務(wù)復(fù)雜、規(guī)模龐大的項(xiàng)目來(lái)說(shuō),使用網(wǎng)關(guān)有很多無(wú)法舍棄的好處,比如可以進(jìn)行統(tǒng)一的請(qǐng)求聚合來(lái)節(jié)省流量、降低耦合度,可以賦予項(xiàng)目熔斷限流的能力提高可用性等等。
ocelot是什么
ocelot是.net core實(shí)現(xiàn)的開源的api網(wǎng)關(guān)項(xiàng)目,開源地址:https://github.com/ThreeMammals/Ocelot
ocelot除了十分契合.net開發(fā)者以外,功能強(qiáng)大,包含:路由、認(rèn)證、請(qǐng)求聚合、限流熔斷、服務(wù)發(fā)現(xiàn)、鑒權(quán),還有內(nèi)置負(fù)載均衡器、Consul集成等等。
當(dāng)然了,api網(wǎng)關(guān)不止這一款,市面上還有kong之類的,隨自己喜好就好。
ocelot集成
首先明確一點(diǎn),網(wǎng)關(guān)應(yīng)該作為獨(dú)立進(jìn)程存在。那么我們先新建一個(gè).net core3.1項(xiàng)目,然后添加nuget包:

關(guān)于版本,選擇當(dāng)前所能支持的最新版即可。
添加好nuget包以后,需要修改StartUp:
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddOcelot();
//services.AddControllers();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseOcelot().Wait();
//if (env.IsDevelopment())
//{
// app.UseDeveloperExceptionPage();
//}
//app.UseHttpsRedirection();
//app.UseRouting();
//app.UseAuthorization();
//app.UseEndpoints(endpoints =>
//{
// endpoints.MapControllers();
//});
}這里不要驚訝,因?yàn)樽吡司W(wǎng)關(guān)就不會(huì)再走默認(rèn)的管道了。UseOcelot().Wait() 表示設(shè)置ocelot所有的中間件,而ocelot也提供了很多集成中間件的庫(kù),就像這些:

現(xiàn)在,想要讓ocelot成功運(yùn)行,還需要新增配置文件,并在Program新增配置文件的引用:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(config =>
{
config.AddJsonFile("ocelotConfig.json", optional: false, reloadOnChange: true);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});配置文件:
{
"Routes": [
{
"DownstreamPathTemplate": "/{url}", //服務(wù)地址--url變量
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "123.123.123.123",
"Port": 5050 //服務(wù)端口
}
],
"UpstreamPathTemplate": "/MJ/{url}", //網(wǎng)關(guān)地址--url變量
"UpstreamHttpMethod": [ "Get", "Post" ]
}
]
}這是一份簡(jiǎn)單的轉(zhuǎn)發(fā)配置,Downstream和Upstream開頭的配置項(xiàng)就是下游、上游相關(guān)項(xiàng)。這里要說(shuō)一句,在微服務(wù)架構(gòu)中,客戶端——服務(wù)端通常理解為上游——下游,這里自行替換一下。
上面的配置文件做了一件事,接收上游請(qǐng)求時(shí),把請(qǐng)求路徑中含有【/MJ/所有】的請(qǐng)求轉(zhuǎn)發(fā)到IP【http://123.123.123.123:5050/所有】并回傳結(jié)果,支持http的get、post方法,其實(shí)這就是最基本的路由。
來(lái)測(cè)試一下,啟動(dòng)項(xiàng)目并寫好請(qǐng)求路徑:

可以看到,ocelot成功把本地請(qǐng)求按照路由規(guī)則轉(zhuǎn)發(fā)給遠(yuǎn)程服務(wù)器,并回發(fā)了結(jié)果。一個(gè)網(wǎng)關(guān)最基本的功能有了。
截圖中所請(qǐng)求的遠(yuǎn)程服務(wù),是我前幾篇文章基于consul搭建起來(lái)的項(xiàng)目,有興趣可以去看看。
關(guān)于ocelot更高級(jí)的應(yīng)用,比如熔斷限流、身份認(rèn)證等,都是通過(guò)配置來(lái)完成的,我會(huì)整理后發(fā)出來(lái),同時(shí)也建議仔細(xì)閱讀官方文檔,地址:https://ocelot.readthedocs.io/en/latest/
到此這篇關(guān)于.Net Core微服務(wù)網(wǎng)關(guān)Ocelot基礎(chǔ)介紹及集成的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- ASP.NET Core為Ocelot網(wǎng)關(guān)配置Swagger
- ASP.NET?Core設(shè)置Ocelot網(wǎng)關(guān)限流
- ASP.NET?Core中的Ocelot網(wǎng)關(guān)介紹
- .Net?Core微服務(wù)網(wǎng)關(guān)Ocelot超時(shí)、熔斷、限流
- .Net?Core微服務(wù)網(wǎng)關(guān)Ocelot集成Consul
- ASP.NET Core Api網(wǎng)關(guān)Ocelot的使用初探
- ASP.NET Core3.1 Ocelot負(fù)載均衡的實(shí)現(xiàn)
- ASP.NET Core3.1 Ocelot認(rèn)證的實(shí)現(xiàn)
- ASP.NET Core3.1 Ocelot路由的實(shí)現(xiàn)
- Asp.Net?Core使用Ocelot結(jié)合Consul實(shí)現(xiàn)服務(wù)注冊(cè)和發(fā)現(xiàn)
相關(guān)文章
解讀ASP.NET 5 & MVC6系列教程(15):MvcOptions配置
這篇文章主要介紹了ASP.NET 5 MVC6中MvcOptions配置方法,需要的朋友可以參考下2016-06-06
NopCommerce架構(gòu)分析之(四)基于路由實(shí)現(xiàn)靈活的插件機(jī)制
本文主要介紹NopCommerce中,通過(guò)注冊(cè)路由,實(shí)現(xiàn)插件的機(jī)制,同時(shí),NopCommerce中每個(gè)插件都集成IPlugin接口,插件擁有安裝和卸載的功能。2016-04-04
在ASP.NET 2.0中操作數(shù)據(jù)之五十四:添加新記錄時(shí)包含一個(gè)文件上傳選項(xiàng)
上篇文章主要介紹了,ASP.NET 2.0中如何顯示二進(jìn)制數(shù)據(jù),本文主要介紹如何將圖片上傳,轉(zhuǎn)換成二進(jìn)制數(shù)據(jù)保存在數(shù)據(jù)庫(kù)中。2016-05-05
NopCommerce架構(gòu)分析之(八)多語(yǔ)言支持
NopCommerce支持多國(guó)語(yǔ)言,很好的做到了國(guó)際化,我們可以很輕松的下載中文或任意國(guó)家的語(yǔ)言包,上傳進(jìn)行切換,下面就讓我們看看NopCommerce是如何實(shí)現(xiàn)對(duì)多語(yǔ)言的支持的吧。2016-04-04
在ASP.NET 2.0中操作數(shù)據(jù)之六十二:GridView批量更新數(shù)據(jù)
GridView控件內(nèi)置的編輯功能只能對(duì)每行進(jìn)行編輯,做不到批量編輯。為此,我們需要將GridView里的列轉(zhuǎn)換為TemplateFields,通過(guò)一個(gè)單獨(dú)的“Update All”按鈕,在按鈕的事件中批量處理每一行。2016-05-05
在ASP.NET 2.0中操作數(shù)據(jù)之六十四:GridView批量添加數(shù)據(jù)
前面介紹了批量更新,批量刪除數(shù)據(jù),這篇文章主要介紹如何實(shí)現(xiàn)批量添加數(shù)據(jù),當(dāng)然為了保證數(shù)據(jù)的完整性,我們?cè)谧鲞@些批量操作的時(shí)候,都使用了事務(wù)來(lái)實(shí)現(xiàn)。2016-05-05
在ASP.NET 2.0中操作數(shù)據(jù)之十五:在GridView的頁(yè)腳中顯示統(tǒng)計(jì)信息
本文主要介紹在GridView中顯示頁(yè)腳的實(shí)現(xiàn)方法,通過(guò)設(shè)置ShowFooter設(shè)置為True,再配合事件和底層的方法從而實(shí)現(xiàn)在GridView的頁(yè)腳區(qū)域顯示相關(guān)的統(tǒng)計(jì)信息。2016-05-05
在ASP.NET 2.0中操作數(shù)據(jù)之五十一:從GridView的頁(yè)腳插入新記錄
本文介紹在ASP.NET 2.0中如何在GridView的頁(yè)腳動(dòng)態(tài)插入一行新記錄,要顯示頁(yè)腳行只需要設(shè)置ShowFooter屬性為true。我們可以這樣對(duì)頁(yè)腳行進(jìn)行用戶定制:將每一列轉(zhuǎn)換成TemplateField,并在其FooterTemplate模板定制插入界面。2016-05-05
.Net?Core微服務(wù)網(wǎng)關(guān)Ocelot基礎(chǔ)介紹及集成
這篇文章介紹了.Net?Core微服務(wù)網(wǎng)關(guān)Ocelot基礎(chǔ)及集成,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-01-01

