为何这篇的标题叫“Ocelot简易教程(二)之快速开始2”呢,由于不少朋友跟我说上一篇“ Ocelot简易教程(二)之快速开始1”内容太少了,只是简单介绍Ocelot的一些简单配置,让Ocelot能跑起来!因此才有了这篇快速开始2.在这篇文章中,我会一步一步记录怎么跑起来一个Ocelot项目,并简单的介绍一下Ocelot怎么实现接口间的负载均衡!此篇文章的代码我会放在个人github上面。后续深刻的记录Ocelot的使用的时候也会沿用此次的代码。html
Ocelot简易教程(七)之配置文件数据库存储插件源码解析git
本文做者:依乐祝
原文地址:http://www.javashuo.com/article/p-qkgaxres-dn.htmlgithub
演示项目概述
此次的演示项目由于要实现Ocelot的负载均衡的功能,所以至少须要三个项目:Ocelot网关,OrderApi,GoodApi .名字随便取的,可能博主认为这样起名字比较顺口,没有其余特别的含义。web
新建上面的三个asp.net core web api项目
相信看这篇文章的朋友至少应该懂asp.net core了吧,否则你也接触不到Ocelot的。因此,这里假设你们都会建立asp.net core web api(由于真的没什么技术含量)。建立后的项目接口以下图所示:数据库
也能够经过命令 Install-Package Ocelot
进行安装。方式随你喜欢。json
而后给OcelotDemo项目新建一个json文件,新建的方式就是,右键OcelotDemo项目,而后选择“添加”-》“新建项”,在弹出的窗口里面找到json文件,并写好文件的名字便可,(固然,也能够用快捷键 Ctrl+Shilt+A
)以下图所示:c#
固然,你还须要右键你刚刚设置的ocelot.json文件,并设置“复制到输出目录”的属性为“始终复制”以下所示:api
接下来,能够按照我写的很是简单的配置进行配置。数组
{ "ReRoutes": [ { "DownstreamPathTemplate": "/api/{everything}", "DownstreamScheme": "http", "DownstreamHostAndPorts": [ { "Host": "localhost", "Port": 1001 }, { "Host": "localhost", "Port": 1002 } ], "UpstreamPathTemplate": "/{everything}", "UpstreamHttpMethod": [ "Get", "Post" ], "LoadBalancerOptions": { "Type": "RoundRobin" } } ], "GlobalConfiguration": { } }
上面配置,有两个节点,分别是ReRoutes数组,以及GlobalConfiguration。这里简单作一下阐述:服务器
ReRoutes:告诉Ocelot如何处理上游的请求。
DownstreamPathTemplate:下游的路由模板,即真实处理请求的路径模板
DownstreamScheme:请求的方式,如:http,htttps
DownstreamHostAndPorts:下游的IP以及端口,能够有多个(若是使用负载均衡),方便实现负载均衡,固然你也可使用服务发现,实现下游服务的自动注册与发现,这篇文章不会讲解。
UpstreamPathTemplate:上游请求的模板,即用户真实请求的连接
UpstreamHttpMethod:上游请求的http方法,是个数组,你能够写多个。
LoadBalancerOptions:负载均衡选项(DownstreamHostAndPorts有多个的时候才能看到效果),有三种方式
LeastConnection : 将请求发往最空闲的那个服务器
RoundRobin :轮流发送
NoLoadBalance :不启用负载均衡,老是发往第一个请求或者服务发现的那个服务器
GlobalConfiguration:顾名思义就是全局配置,此节点的配置容许覆盖ReRoutes里面的配置,你能够在这里进行通用的一些配置信息。
OcelotDemo中添加Ocelot支持。
首先在OcelotDemo项目的Program.cs中加载上一步咱们添加的Ocelot的配置文件,以下所示:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) => { config .SetBasePath(hostingContext.HostingEnvironment.ContentRootPath) .AddJsonFile("appsettings.json", true, true) .AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", true, true) .AddJsonFile("Ocelot.json") .AddEnvironmentVariables(); }) .UseUrls("http://localhost:1000") .UseStartup<Startup>();
而后,在Startup.cs中,添加Ocelot服务并启用Ocelot中间件,这里你须要在Startup.cs文件中引入下面两个命名空间:
using Ocelot.DependencyInjection; using Ocelot.Middleware;
而后,分别在ConfigureServices中注册Ocelot服务以及Configure中启用Ocelot中间件:
public void ConfigureServices(IServiceCollection services) { services.AddOcelot();//注入Ocelot服务 services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseOcelot().Wait();//使用Ocelot中间件 app.UseMvc(); }
这时候,Ocelot的配置基本完成了,下面咱们验证下Ocelot有没有正常工做,以及咱们配置的负载均衡,有没有起做用吧。
测试Ocelot项目以及负载均衡有没有起做用
这里,首先分别对三个项目的ValuesController控制器作以下改造:
OcelotDemo项目ValuesController中的Get方法改造以下:
[HttpGet] public ActionResult<IEnumerable<string>> Get() { return new string[] { "value1 from Ocelot", "value2 from Ocelot" }; }OrderApi项目中的ValuesController中的Get方法改造以下:
[HttpGet] public ActionResult<IEnumerable<string>> Get() { return new string[] { "value1 from Order Api", "value2 from Order Api" }; }GoodApi项目中的ValuesController中的Get方法改造以下:
[HttpGet] public ActionResult<IEnumerable<string>> Get() { return new string[] { "value1 from Good Api", "value2 from Good Api" }; }
结合咱们上面的配置,能够知道改造的目的就是为了以下的测试,咱们作出以下假设:
- 为了验证上游模板/{everything} 对应下游模板/api/{everything} 咱们请求的路径即为http://localhost:1000/Values 而且把GoodApi以及GoodApi响应路径分别设置为:http://localhost:1001/api/Values ,http://localhost:1003/api/Values 并获得正确的响应
- 为了验证Ocelot项目起做用,咱们请求ocelotDemo项目的路径values,应该返回GoodApi,或者OrderApi项目中values控制器的值,而不是返回ocelotDemo中values控制器的值
- 为了验证Ocelot负载均衡起做用,咱们连续访问ocelotDemo项目的路径values,则返回的结果应该是轮流返回GoodApi以及OrderApi的值。
下面咱们利用 dotnet run
命令分别启动三个项目,固然你也能够多项目启动。而后访问OcelotDemo项目的Url并访问Values控制器,完整路径“http://localhost:1000/Values”,看到
OcelotDemo的Url:http://localhost:1000
GoodApi的Url:http://localhost:1001
OrderApi的Url:http://localhost:1002
咱们第一次访问http://localhost:1000/Values 获得以下结果:
说明咱们的假设1以及假设2都是没问题的。也就是说咱们的Ocelot已经在起做用了,并且根据上下游路由进行了映射。
接下来咱们刷新下页面,获得以下结果:
说明咱们的假设3即Ocelot的负载均衡也起做用了。固然,你能够多刷新几回,能够看到返回的结果在GoodApi与Order Api之间来回切换。由于咱们的负载均衡策略就是轮询啊!
Github地址:https://github.com/yilezhu/OcelotDemo
这篇文章主要是为了让记录如何快速的开始使用Ocelot。关于Ocelot的配置不少都没有描述,包括限流以及熔断策略,以及多配置文件自动加载功能,等等。这个超出了快速开始的范围,固然这些高级的用法会在下面的系列文章中会一一记录。
本文使用的是Ocelot最新版本,为了保持技术上的跟进,所以没有使用上篇文章介绍的老版本,因此演示都是经过最新的ocelot版原本跟进的!
本篇文章只是记录了,如何快速的成功的使用ocelot,并进行了简单的配置,配置中又引入了一个负载均衡的策略,最后经过代码进行了相关的实现以及测试!关于其余的一些配置,我会在下面的文章中进行阐述。这里只是对上篇文章“Ocelot简易教程(二)之快速开始1”的补充!感谢你们的阅读!