在ASP.NET Core YARP中,当我们需要在同一个应用程序内使用多个监听端口时,可以按照以下步骤进行配置:
services.AddRouting();
services.AddReverseProxy()
.LoadFromConfig(Configuration.GetSection("ReverseProxy"))
.AddTransforms()
.AddHttpMethodRouteTransformer()
.AddForwardedHeaders();
var endpoints = new List();
foreach (var kvp in Configuration.GetSection("ReverseProxy:Cluster").GetChildren())
{
var clusterName = kvp.Key;
var clusterConfig = kvp.Get();
var proxyEndpoint = new ProxyEndpoint(
RoutePatternFactory.Parse(clusterConfig.PathPattern ?? "/"),
clusterConfig);
var endpoint = new Endpoint(_ => Task.CompletedTask, proxyEndpoint, clusterName);
endpoints.Add(endpoint);
}
foreach (var port in Configuration.GetSection("AppPorts").Get>())
{
app.MapWhen(
context => context.Connection.LocalPort == port,
appBuilder =>
{
appBuilder.UseRouting();
appBuilder.UseEndpoints(builder =>
{
foreach (var endpoint in endpoints)
{
builder.MapEndpoint(endpoint);
}
});
});
}
"AppPorts": [5000, 5001],
"ReverseProxy": {
"Cluster": {
"cluster-name-1": {
"Destinations": {
"destination-name-1": {
"Address": "http://localhost:1234"
}
}
},
"cluster-name-2": {
"Destinations": {
"destination-name-2": {
"Address": "http://localhost:5678"
}
}
}
}
}
上述代码中,我们定义了两个监听端口:5000和5001,以及两个不同的路由规则:cluster-name-1和cluster-name-2。每个路由规则