Ocelot 就是一个提供了请求路由、安全验证等功能的 API 网关微服务。
建一个空的 asp.net core web的apiAPI 网关项目:OcelotTest(我选择的是2.1版本的API做测试)添加包:Install-Package Ocelot
项目根目录下创建 configuration.json 创建之后右键属性改成:如果较新则复制
{
"ReRoutes": [
{
"DownstreamPathTemplate": "/api/{url}",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5001
}
],
"UpstreamPathTemplate": "/MsgService/{url}",//MsgService表示一个netcore web的一个api项目名称
"UpstreamHttpMethod": [ "Get", "Post" ]
},
{
"DownstreamPathTemplate": "/api/{url}",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5003
}
],
"UpstreamPathTemplate": "/ProductService/{url}",
"UpstreamHttpMethod": [ "Get", "Post" ]
}
]
}
在OcelotTest的Program.cs中的CreateWebHostBuilder方法中添加两段代码
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
#region 添加部分
.UseStartup<Startup>()
.UseUrls("http://localhost:8888")
.ConfigureAppConfiguration((hostingContext, builder) =>
{
builder.AddJsonFile("configuration.json", false, true);
});
#endregion
在Startup类中ConfigureServices方法进行服务注册
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
//注册ocelot服务
services.AddOcelot(Configuration);
}
在Startup类中Configure方法进行注册中间件
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
//注册ocelot中间件
app.UseOcelot().Wait();//不要忘了写Wait
app.UseHttpsRedirection();
app.UseMvc();
}
测试:该测试与ConSul服务治理发现案例中的MsgService项目结合
第一步: cmd管理员开启ConSul服务 :
在运行中输入cmd 命令,然后在cmd中输入命令,执行cd命 令切换到consul文件所在的盘符及文件夹
然后执行 consul.exe agent -dev
consul 的监控页面 http://127.0.0.1:8500/
第二步:开启服务之后启动MsgService服务项目,通过cmd命令cd进入文件夹
1:通过命令执行:dotnet MsgService.dll --ip localhost --port 6001 (localhost:表示本机,6001:自定义的端口号)
(因为该命令包含ip和端口号所以MsgService项目Program.cs中的方法CreateWebHostBuilder修改如下:)
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
var config = new ConfigurationBuilder().AddCommandLine(args).Build();
String ip = config["ip"];
String port = config["port"];
return WebHost.CreateDefaultBuilder(args).UseStartup<Startup>().UseUrls($"http://{ip}:{port}");
}
2:查看consul服务的cmd页面是否通过健康检查 出现is passing为通过
第三步:命令启动OcelotTest项目
1:因为Program.cs的CreateWebHostBuilder方法中已经配置了IP和端口号所以cd进入文件夹之后直接使用:dotnet OcelotTest.dll
最后一步:CreateWebHostBuilder方法中的http://localhost:8888/项目服务名称/控制器