微服务的Ocelot apiAPI 网关(API GateWay)

楚望
2023-12-01

一、 Ocelot 基本配置

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/项目服务名称/控制器

 类似资料: