Ocelot(一)-微服务网关

参考: Ocelot官方文档

Ocelot是什么:

Ocelot是.NET下最常用的轻量型微服务网关,主要是用来组织.NETCORE 的微服务为统一服务入口,业务服务实际上是不对外网开放的,统一使用微服务网关进行访问。

Ocelot设置:

创建一个netcore webapi项目 添加ocelot引用:

 

 cache和consul 缓存和服务发现暂时不使用,可以不添加.

项目启动文件Program和StartUp代码如下:

Program.cs

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using NLog.Web;

namespace GetwayService
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        /// <summary>
        /// 使用startup初始化
        /// </summary>
        /// <param name="args"></param>
        /// <returns></returns>
        public static IHostBuilder CreateHostBuilder(string[] args) =>
         Host.CreateDefaultBuilder(args)
            .ConfigureLogging((context, loggingBuilder) =>
            {

                loggingBuilder.ClearProviders();              
                loggingBuilder.AddDebug();//添加显示到控制台
                loggingBuilder.AddConsole();
            })
             .ConfigureAppConfiguration((hostingContext, config) =>
             {
                 //config.SetBasePath(hostingContext.HostingEnvironment.ContentRootPath)
                 //    .AddJsonFile("appsettings.json", true, true);
                     config.AddJsonFile("ocelot.json");                   
             })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseUrls();//配置urls
                webBuilder.UseStartup<Startup>();
            }).UseNLog();

       
    }

}

 

StartUp.cs

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Ocelot.DependencyInjection;
using Ocelot.Middleware;

namespace GetwayService
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {

            services.AddOcelot();
            services.AddControllers();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {

            //app.UseHttpsRedirection();        

            app.UseOcelot().Wait();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }
}

添加完后我们开始配置json文件ocelot。

 

1.转发设置:

非常简单不需要在业务服务商进行任何配置只需要创建一个ocelot项目,配置ocelot.json文件即可,ocelot可以配置发现服务Consul使用,也可以直接配置服务地址,不使用发现服务,这里为了入门学习暂时不使用发现服务(服务比较多的情况下推荐使用Consul).

如下所示,这里创建了一个转发服务,当访问http://localhost:8001/goods/***时,全部转发到http://localhost:7001路径下.

ocelot.json:

{
  "Routes": [
    {
      "DownstreamPathTemplate": "/{url}", //跳转到localhost:7001根路由下
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": 7001
        }
      ],
      "UpstreamPathTemplate": "/goods/{url}", //网关地址+/goods
      "UpstreamHttpMethod": [ "POST", "PUT", "GET","DELETE"]
    }    
  ],
  "GlobalConfiguration": {
    "BaseUrl": "http://localhost:8001"//网关访问地址也是网关程序的端口地址
  }  
}

参数解析:

ocelot主要的json参数:

GlobalConfiguration和Routes:

  GlobalConfiguration网关入口设置,和业务服务无关,用于外部访问

  Routes路由设置:配置网关服务接收到HTTP请求后的转发规则。

Routes参数:
Upstream***:表示网关路由
Downstream***:表示下游业务地址,也就是实际的目录网址.
DownstreamHostAndPorts:下游业务服务器,可以配置多组,使用负载均衡.
如上图所示,一个简单的转发就完成了.


 

posted @ 2020-10-12 10:36  Merray  Views(559)  Comments(0Edit  收藏  举报