YARP一个.net core平台下新的网关框架,微软自己家的,应该不错大家可以拿来用下。不过yarp比较新所以只支持.net core3.1以上版本的,如果你的项目时3.1以前的,那没办法赶紧升版本吧。

yarp的官方文档YARP Documentation,官网上写道这是一个高性能的网关。拿来用下看看,顺便跟之前的ocelot做下简单比较,哪个性能好。

使用方法,创建一个.net core3.1项目,nuget安装Yarp.ReverseProxy

 然后在appsetting.json中添加节点配置如下,yarp也跟ocelot一样是通过配置文件来实现对代理地址设置。http://localhost:5001是我之前就创建好的一个api项目,准备用yarp代理到这个api地址来访问。

  "ReverseProxy": {
    "Routes": {
      "route2": {
        "ClusterId": "cluster_product",
        "Match": {
          "Path": "/api/{*all}"
        },
        "Transforms": [
          {}
        ]
      }
    },
    "Clusters": {
      "cluster_product": {
        "Destinations": {
          "first_destination": {
            "Address": "http://localhost:5001"
          },
          "two_destination": {
            "Address": "http://localhost:5001"
          }
        }
      }
    }
  }

在startup中代码如下

    public class Startup {
        public readonly IConfiguration _configuration;
        public Startup(IConfiguration configuration) {
            _configuration = configuration;
        }

        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services) {
            // Add the reverse proxy to capability to the server
            var proxyBuilder = services.AddReverseProxy();
            // Initialize the reverse proxy from the "ReverseProxy" section of configuration
            proxyBuilder.LoadFromConfig(_configuration.GetSection("ReverseProxy"));
        }

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

            app.UseRouting();

            app.UseEndpoints(endpoints => {
                //endpoints.MapGet("/", async context => {
                //    await context.Response.WriteAsync("Hello World!");
                //});
                endpoints.MapReverseProxy();
            });
        }
    }

然后运行此程序

同时我又用ocelot也创建了一个项目,同样也是代理到这个地址http://localhost:5001

两个网关项目都运行起来,同时api项目也运行起来。通过postman进行调用测试

5003端口是yarp网关,8001端口是ocelot网关

yarp 

ocelot 

 经过多次调用同一个接口发现,yarp的速度要比ocelot快不少,至少30%以上。的确不错哦,可以拿来一用的。

我只是简单的一测试,不过大体能说明yarp性能确实不错,大家可以自己去做下测试。

Logo

鸿蒙生态一站式服务平台。

更多推荐