.net core 微服务之API网关 开源中间件 Ocelot 笔记
?一夫當關(guān)萬夫莫開
一:源起:
? ? ? ? 當我們的應(yīng)用不再是單體架構(gòu)時,微服務(wù)將原先單體下的功能組件分割后,產(chǎn)生了許多個微服務(wù),實際上我們還是以前那樣的操作,訪問服務(wù)接口,達到我們的目的,而這次不過是換成了http(s)請求的微服務(wù),以前的服務(wù)接口也是有base服務(wù)以便掛載一些通用處理,所以這里分化出去的微服務(wù)也是要一個統(tǒng)一的入口或者稱之為管家的東西來管理與分發(fā)。那么API網(wǎng)關(guān)這樣一個概念就呼之欲出了,這里將記錄.net core開源的網(wǎng)關(guān) Ocelot 的使用。
二:搬磚:
? ? ?此處流程只是Ocelot作為網(wǎng)關(guān)轉(zhuǎn)發(fā)請求的簡單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個微服務(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個微服務(wù)就是普通的設(shè)置:?
namespace?MicroServicePost.Controllers {[Route("api/[controller]")]public?class?PostController?:?Controller{[HttpGet]public?IEnumerable<string>?yishuiPost(){return?new?string[]?{?"易",?"水",?"POST"?};}} }這里是調(diào)試啟動3個進程,且Ocelot的配置需要明確的地址,所以端口要么是看api各自屬性里面設(shè)定的要么就是統(tǒng)一改下占用端口,且調(diào)試啟動3個端口需要到解決方案屬性那里設(shè)定,且這3個進程同屬于一個解決方案內(nèi),后續(xù)的部署將是啟動docker而不是這樣圖方便一個解決方案啟動的方式。
運行結(jié)果如下:
當往網(wǎng)關(guān)輸入對應(yīng)的微服務(wù)路由時,你能看到不同服務(wù)的回調(diào),當然實際上微服務(wù)端口還是需要禁止訪問的,對外面只是暴露80端口這個就是后話了。
轉(zhuǎn)載于:https://blog.51cto.com/13950217/2168967
總結(jié)
以上是生活随笔為你收集整理的.net core 微服务之API网关 开源中间件 Ocelot 笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Echarts图标自适应问题(已解决)
- 下一篇: PHP 的 Phar 包原来性能这么强!