.net core 微服务之API网关 开源中间件 Ocelot 笔记
?一夫當(dāng)關(guān)萬夫莫開
一:源起:
? ? ? ? 當(dāng)我們的應(yīng)用不再是單體架構(gòu)時(shí),微服務(wù)將原先單體下的功能組件分割后,產(chǎn)生了許多個(gè)微服務(wù),實(shí)際上我們還是以前那樣的操作,訪問服務(wù)接口,達(dá)到我們的目的,而這次不過是換成了http(s)請(qǐng)求的微服務(wù),以前的服務(wù)接口也是有base服務(wù)以便掛載一些通用處理,所以這里分化出去的微服務(wù)也是要一個(gè)統(tǒng)一的入口或者稱之為管家的東西來管理與分發(fā)。那么API網(wǎng)關(guān)這樣一個(gè)概念就呼之欲出了,這里將記錄.net core開源的網(wǎng)關(guān) Ocelot 的使用。
二:搬磚:
? ? ?此處流程只是Ocelot作為網(wǎng)關(guān)轉(zhuǎn)發(fā)請(qǐng)求的簡(jiǎn)單demo,代碼設(shè)置源自網(wǎng)上,部分自己瞎改
? ? ?環(huán)境:
? ? ? ? ?vs2017? ||? ?.net core 2.0 ||?Ocelot 8.0.0
? ? ?1.創(chuàng)建網(wǎng)關(guān)api(nuget或者其他引入Ocelot的依賴),以及2個(gè)微服務(wù)api。
? ? ?2.網(wǎng)關(guān)api這里我省去了原有的(control以及mvc服務(wù))
? ? Ocelot配置文件
{"ReRoutes":?[//微服務(wù)一配置:{"DownstreamPathTemplate":?"/api/get","DownstreamScheme":?"http","DownstreamHostAndPorts":?[{"Host":?"localhost","Port":?60001}],"UpstreamPathTemplate":?"/api/get","UpstreamHttpMethod":?[?"Get"?]},//微服務(wù)二配置:{"DownstreamPathTemplate":?"/api/post","DownstreamScheme":?"http","DownstreamHostAndPorts":?[{"Host":?"localhost","Port":?60002}],"UpstreamPathTemplate":?"/api/post","UpstreamHttpMethod":?[?"Get"?]}],"GlobalConfiguration":?{"BaseUrl":?"localhost:60000"} }網(wǎng)關(guān)api設(shè)置:
在 Program.cs添加Ocelot的配置文件
????????public?static?IWebHost?BuildWebHost(string[]?args)?=>WebHost.CreateDefaultBuilder(args)//此處添加Ocelot的配置.ConfigureAppConfiguration((hostingContext,?builder)?=>?{builder.SetBasePath(hostingContext.HostingEnvironment.ContentRootPath).AddJsonFile("ocelot.json");}).UseStartup<Startup>().Build();在Startup.cs添加Ocelot服務(wù)
?public?void?ConfigureServices(IServiceCollection?services){//添加網(wǎng)關(guān)配置services.AddOcelot(Configuration);}public?void?Configure(IApplicationBuilder?app,?IHostingEnvironment?env){if?(env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseOcelot().Wait();}?2個(gè)微服務(wù)就是普通的設(shè)置:?
namespace?MicroServicePost.Controllers {[Route("api/[controller]")]public?class?PostController?:?Controller{[HttpGet]public?IEnumerable<string>?yishuiPost(){return?new?string[]?{?"易",?"水",?"POST"?};}} }這里是調(diào)試啟動(dòng)3個(gè)進(jìn)程,且Ocelot的配置需要明確的地址,所以端口要么是看api各自屬性里面設(shè)定的要么就是統(tǒng)一改下占用端口,且調(diào)試啟動(dòng)3個(gè)端口需要到解決方案屬性那里設(shè)定,且這3個(gè)進(jìn)程同屬于一個(gè)解決方案內(nèi),后續(xù)的部署將是啟動(dòng)docker而不是這樣圖方便一個(gè)解決方案啟動(dòng)的方式。
運(yùn)行結(jié)果如下:
當(dāng)往網(wǎng)關(guān)輸入對(duì)應(yīng)的微服務(wù)路由時(shí),你能看到不同服務(wù)的回調(diào),當(dāng)然實(shí)際上微服務(wù)端口還是需要禁止訪問的,對(duì)外面只是暴露80端口這個(gè)就是后話了。
轉(zhuǎn)載于:https://blog.51cto.com/13950217/2168967
總結(jié)
以上是生活随笔為你收集整理的.net core 微服务之API网关 开源中间件 Ocelot 笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Echarts图标自适应问题(已解决)
- 下一篇: 算法参数介绍