• YARP简介 —— IHttpForwarder


    YARP框架中,核心处理类是IHttpForwarder接口,它实现了基础的转发流程:从 HttpContext 创建 Http 查询信息、发送到目标地址,并将响应结果写会HttpContext。

    IHttpForwarder特点如下:

    1. 灵活,能根据请求动态选择代理目标
    2. 强大,能修改http请求和响应的头
    3. 支持gRPC或WebSockets这种流式协议
    4. 支持异常处理

    它简单灵活,本身是一个反向代理的功能类的。 用它本身是可以非常简单的实现一个反向代理功能的。代码如下: 

    using Yarp.ReverseProxy.Forwarder;

    var builder = WebApplication.CreateBuilder(args);
    builder.Services.AddHttpForwarder();        //
    添加服务

    var httpClient = new HttpMessageInvoker(new SocketsHttpHandler()
    {
        UseProxy          = false,
        AllowAutoRedirect = false,
    });
    var requestConfig = new ForwarderRequestConfig();

    var app    = builder.Build();
    var forwarder = app.Services.GetService<IHttpForwarder>();

    app.UseRouting();
    app.UseEndpoints(endpoints =>
    {
        endpoints.Map("/test/{**catch-all}", async httpContext =>
        {
            await forwarder.SendAsync(httpContext, "http://localhost:5132/",
                httpClient, requestConfig, HttpTransformer.Default);
        });
    });

    app.Run();

    跑起来后,就可以发现test下的接口都已经可以转发到 http://localhost:5132/ 了。

        

    更多信息可以参看微软的官方文档Direct Forwarding,微软也提供了一个最简单的完整示例ReverseProxy.Direct.Sample

    上述代码本身是实现了一个完整的的反向代理的功能的。和目前的主流的反向代理框架比起来,主要缺少一些高级功能,如:路由匹配、负载均衡、会话保持、重试等。但这些高级功能本身不是必须的,这个时候直接用IhttpProxy更加简单直接,也可以方便我们自己构建一个更加灵活高效的反向代理框架。

    参考文章:

     

  • 相关阅读:
    SQLServer性能杀手
    SqlServer内存瓶颈分析SQLServer:Buffer Manager
    HTML5变化 (一)
    对于using嵌套的改进
    String.IsNullOrEmpty()和String.IsNullOrWhiteSpace()
    querySelector & querySelectorAll
    Action<T> 委托
    Func<T, TResult>
    SL4.背景图片拖动
    JavaScript日志
  • 原文地址:https://www.cnblogs.com/TianFang/p/16357549.html
Copyright © 2020-2023  润新知