asp.net core ocelot

网关

水平扩展、垂直拆分

安装ocelot

1 nuget引入ocelot

2 创建一个空项目

 3.Startup.cs

导入

using Ocelot.DependencyInjection;
using Ocelot.Middleware;

添加中间件

    public class Startup
    {

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddOcelot();
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.UseOcelot();
        }
    }

4.Program.cs

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

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
            //添加一个独立的Ocelot.json配置文件
            .ConfigureAppConfiguration((hostingContext, builder) =>
            {
                builder
                .SetBasePath(hostingContext.HostingEnvironment.ContentRootPath)
                .AddJsonFile("Ocelot.json");
            })
            .ConfigureWebHostDefaults(webBuilder =>
             {
                 webBuilder.UseStartup<Startup>().UseUrls("http://127.0.0.1:5000");
             });
    }

5.Ocelot.json

  "Routes": [
    {
      //服务地址
      "DownstreamPathTemplate": "/api/{url}",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "127.0.0.1",
          "Port": 8001
        }
      ],
      //客户端请求地址
      "UpstreamPathTemplate": "/api/{url}",
      "UpstreamHttpMethod": [ "get", "post" ]
    }
  ]

 

路由功能

xxx

 

请求聚合

 

缓存

1.

 

 

 

 2.自定义缓存

 

负载均衡配置

{
  "Routes": [
    {
      //服务地址
      "DownstreamPathTemplate": "/api/{url}",
      "DownstreamScheme": "http",
      //配置多个服务地址
      "DownstreamHostAndPorts": [
        {
          "Host": "127.0.0.1",
          "Port": 8001
        },
        {
          "Host": "127.0.0.1",
          "Port": 8002
        }
      ],
      //客户端请求地址
      "UpstreamPathTemplate": "/api/{url}",
      "UpstreamHttpMethod": [ "get", "post" ],
      //均衡策略:1.LeastConnection 最少连接数,2.RoundRobin 轮询,3.NoLoadBalancer 从配置或服务发现中获取第一个可用服务,4.CookieStickySessions 使用 Cookie 将所有请求粘贴到特定服务器??
      "LoadBalancerOptions": {
        "Type": "RoundRobin"
      }
    }
  ]
}

 这么配置目前存在一个问题,当后端有一个服务端挂掉,客户端访问挂掉的服务器时不会切换到可用的服务器上。

解决方法:配合consul服务发现

 学习完consul再补xxxxxxxxxxxxx

 

注册发现

ocelot做负载均衡时,如果有一个节点挂掉不会被剔除,负载均衡仍然会把请求分配到挂掉的服务上。所以需要用到注册发现功能

引用包

注册

 

 配置

 

 

服务治理

 

授权鉴权

 

引入

 

 管道还是用这个,不需要加鉴权授权中间件

 

 service里添加

 

 

网关json配置

 

posted @ 2021-09-05 12:30  富坚老贼  阅读(51)  评论(0编辑  收藏  举报