回到目录html
网关在硬件里有本身的定义,而在软件架构里也有本身的解释,它就是全部请求的入口,请求打到网关上,通过处理和加工,再返回给客户端,这个处理过程当中固然就是网关的核心,也是Ocelot的核心,咱们能够把用户受权,校验,缓存,认证等不少关注点在网关中实现!git
善友大哥收录的:http://www.csharpkit.com/2018-01-06_69695.htmlgithub
原文地址:http://www.cnblogs.com/axzxs2001/p/8005041.htmljson
Github地址:https://github.com/TomPallister/Ocelotapi
API网关是一个服务器,是系统的惟一入口。从面向对象设计的角度看,它与外观模式相似。API网关封装了系统内部架构,为每一个客户端提供一个定制的API。它可能还具备其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。缓存
例如:手机和WEB网站都须要调用API接口,它们直接与网关进行通信,而不用关心具体的服务是A仍是B服务器
安装Ocelot包:Install-Package Ocelot架构
创建两个项目,网关主项目,DemoA和DemoB,这样A和B两个项目都会指定网关项目,经过访问网关就能够访问这两个项目了.app
Gateway网关项目,端口是5000负载均衡
DemoA项目,端口是5001
DemoB项目,端口是5002
在Gateway项目添加配置文件configuration.json,将它复制到输出目录,右键-属性-始终复制
{ "ReRoutes": [ { "DownstreamPathTemplate": "/api/polly", "DownstreamScheme": "http", "DownstreamPort": 5001, "DownstreamHost": "localhost", "UpstreamPathTemplate": "/api/polly", "UpstreamHttpMethod": [ "Get" ], "QoSOptions": { "ExceptionsAllowedBeforeBreaking": 3, "DurationOfBreak": 10, "TimeoutValue": 5000 }, "HttpHandlerOptions": { "AllowAutoRedirect": false, "UseCookieContainer": false }, "AuthenticationOptions": { "AuthenticationProviderKey": "", "AllowedScopes": [] } } ] }
现时在网关里配置子服务时,也支持路由规则,如控制器,Action时,若是你但愿匹配以某个字符做为前缀的Restful标准的,能够经过下面代码进行配置
{ "DownstreamPathTemplate": "/api/{controller}", "DownstreamScheme": "http", "DownstreamPort": 5001, "DownstreamHost": "localhost", "UpstreamPathTemplate": "/api/{controller}", "UpstreamHttpMethod": [ "Get", "Post", "Put", "Delete" ], },
在网关的启动时,把配置文件注入
public static IWebHost BuildWebHost(string[] args) { IWebHostBuilder builder = new WebHostBuilder(); //注入WebHostBuilder return builder.ConfigureServices(service => { service.AddSingleton(builder); }).ConfigureAppConfiguration(conbuilder => { conbuilder.AddJsonFile("configuration.json"); }).UseKestrel() .UseUrls("http://*:5000") .UseStartup<Startup>() .Build(); }
添加ocelot的中间件和服务
services.AddOcelot(Configuration as ConfigurationRoot); app.UseOcelot().Wait();
调试多个项目,这时咱们的 5000和5001端口都会被监听,咱们输入之间配置的api/polly路径,而后就能够看到它会本身绑定到5001这个子站上!
这样,咱们的网关就算是跑起来了,全部项目有本身的路由模版,根据路由来查找服务!全部服务在外面看上去都像一个网站!