<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      .NET 反向代理 YARP 通過編碼方式配置域名轉發(fā)

        前面介紹了 YARP 通過配置文件的方式配置代理轉發(fā)(傳送門),而眾所周知,微軟的一貫作風就是能通過配置文件做的事情,通過編碼的方式也能實現(xiàn)!YARP 也不例外,廢話不多說,直接上代碼!

        首先,參照官方文檔,我們先新建一個 InMemoryConfigProvider 類,并且繼承 IProxyConfigProvider 接口,類里面還包含了一個  IProxyConfig 的類,別看漏了噢!

        這里多嘴一下,下面的代碼出現(xiàn)了 volatile 關鍵字,介紹一下它:volatile 是 C# 中用于控制同步的關鍵字,其意義是針對程序中一些敏感數(shù)據(jù),不允許多線程同時訪問,保證數(shù)據(jù)在任何訪問時刻,最多有一個線程訪問,以保證數(shù)據(jù)的完整性,volatile 是修飾變量的修飾符。

      public class InMemoryConfigProvider : IProxyConfigProvider
      {
          private volatile InMemoryConfig _config;
      
          public InMemoryConfigProvider(IReadOnlyList<RouteConfig> routes, IReadOnlyList<ClusterConfig> clusters)
          {
              _config = new InMemoryConfig(routes, clusters);
          }
      
          public IProxyConfig GetConfig() => _config;
      
          public void Update(IReadOnlyList<RouteConfig> routes, IReadOnlyList<ClusterConfig> clusters)
          {
              var oldConfig = _config;
              _config = new InMemoryConfig(routes, clusters);
              oldConfig.SignalChange();
          }
      
          private class InMemoryConfig : IProxyConfig
          {
              private readonly CancellationTokenSource _cts = new();
      
              public InMemoryConfig(IReadOnlyList<RouteConfig> routes, IReadOnlyList<ClusterConfig> clusters)
              {
                  Routes = routes;
                  Clusters = clusters;
                  ChangeToken = new CancellationChangeToken(_cts.Token);
              }
      
              public IReadOnlyList<RouteConfig> Routes { get; }
      
              public IReadOnlyList<ClusterConfig> Clusters { get; }
      
              public IChangeToken ChangeToken { get; }
      
              internal void SignalChange()
              {
                  _cts.Cancel();
              }
          }
      }

       

        然后添加一個擴展 InMemoryConfigProviderExtensions

      public static class InMemoryConfigProviderExtensions
      {
          public static IReverseProxyBuilder LoadFromMemory(this IReverseProxyBuilder builder, IReadOnlyList<RouteConfig> routes, IReadOnlyList<ClusterConfig> clusters)
          {
              builder.Services.AddSingleton<IProxyConfigProvider>(new InMemoryConfigProvider(routes, clusters));
              return builder;
          }
      }

       

        接下來就是寫配置了,我個人還是喜歡在配置文件中寫,但是有動態(tài)配置需求的話,又不想登錄服務器編輯 appsetting 文件,通過編碼的方式確實更為方便,將配置寫進庫或者其它存儲方式里面,那將是隨心所欲啊!上代碼:

      Program.cs

      var routes = new[]
      {
          new RouteConfig()
          {
              RouteId = "admin",
              ClusterId = "admin",
              Match = new RouteMatch
              {
                  Hosts = new string[] {"test1.ysmc.net.cn" },
                  Path = "{**catch-all}"
              }
          },
      
          new RouteConfig()
          {
              RouteId = "blazor",
              ClusterId = "blazor",
              Match = new RouteMatch
              {
                  Hosts = new string[] {"test2.ysmc.net.cn" },
                  Path = "{**catch-all}"
              }
          }
      };
      
      var clusters = new[]
      {
          new ClusterConfig()
          {
              ClusterId = "admin",
              LoadBalancingPolicy = "RoundRobin",
              Destinations = new Dictionary<string, DestinationConfig>(StringComparer.OrdinalIgnoreCase)
              {
                  { "admin", new DestinationConfig() { Address = "https://admin.blazor.zone" } }
              }
          },
      
          new ClusterConfig()
          {
              ClusterId = "blazor",
              LoadBalancingPolicy = "RoundRobin",
              Destinations = new Dictionary<string, DestinationConfig>(StringComparer.OrdinalIgnoreCase)
              {
                  { "blazor", new DestinationConfig() { Address = "https://www.blazor.zone" } }
              }
          }
      };
      
      builder.Services.AddReverseProxy().LoadFromMemory(routes, clusters);

        上面的配置代碼,跟配置文件方式的節(jié)點和屬性,都是對應的,照著寫就是了

      "ReverseProxy": {
        "Routes": {
          "admin": {
            "ClusterId": "admin",
            "Match": {
              "Hosts": [ "test1.ysmc.net.cn" ],
              "Path": "{**catch-all}"
            }
          },
          "blazor": {
            "ClusterId": "blazor",
            "Match": {
              "Hosts": [ "test2.ysmc.net.cn" ],
              "Path": "{**catch-all}"
            }
          }
        },
        "Clusters": {
          "admin": {
            "LoadBalancingPolicy": "RoundRobin",
            "Destinations": {
              "admin": {
                "Address": "https://admin.blazor.zone/"
              }
            }
          },
          "blazor": {
            "LoadBalancingPolicy": "RoundRobin",
            "Destinations": {
              "blazor": {
                "Address": "https://www.blazor.zone/"
              }
            }
          }
        }
      }

       

        最終效果還是依舊的完美,感謝大佬的觀看,謝謝!

       原文鏈接:http://www.rzrgm.cn/ysmc/p/16724763.html

      posted @ 2022-09-24 00:40  一事冇誠  閱讀(2864)  評論(5)    收藏  舉報
      主站蜘蛛池模板: 高淳县| 四虎网址| 色综合久久综合中文综合网| 亚洲中文字幕无码爆乳APP| 亚洲免费人成视频观看| 久久人人97超碰国产精品| 国产超碰人人做人人爰| 久久精品国产精品亚洲毛片| 国产精品一区二区三区蜜臀| 噜噜噜噜私人影院| 中日韩中文字幕一区二区| 精品国产中文字幕在线| 中文字幕日韩有码一区| 最新亚洲人成网站在线观看| 国产精品制服丝袜无码| 日韩一区二区三在线观看| 国产精品va无码一区二区| 视频一区二区 国产视频| 普兰店市| 国产草草影院ccyycom| 成人福利国产午夜AV免费不卡在线| 最新精品国偷自产在线美女足| 熟女一区| 国产热A欧美热A在线视频| 成人亚洲综合av天堂| 亚洲AV成人片不卡无码| 亚洲一区二区三区在线| 中国女人熟毛茸茸A毛片| A男人的天堂久久A毛片| 天天干天天色综合网| 夜夜添狠狠添高潮出水| 九九热免费公开视频在线| 国产又色又爽又黄的免费软件| 精品国产精品中文字幕| 清纯唯美人妻少妇第一页| 午夜爽爽爽男女免费观看影院| 婷婷丁香五月六月综合激情啪| 亚洲精品国产美女久久久| 亚洲精品国偷拍自产在线观看蜜臀| 国产不卡在线一区二区| 久久中文字幕国产精品|