LindDotNetCore~Ocelot实现微服务网关

回到目录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服务器

 

 项目Demo

安装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这个子站上!

 

这样,咱们的网关就算是跑起来了,全部项目有本身的路由模版,根据路由来查找服务!全部服务在外面看上去都像一个网站!

回到目录

相关文章
相关标签/搜索