.NET使用YARP通过编码方式配置域名转发实现反向代理(.net core 3.0教程)干货满满

随心笔谈2年前发布 admin
226 0 0

文章摘要

本文介绍了`InMemoryConfigProvider`类,该类继承自`IProxyConfigProvider`接口,用于管理配置。该类包含一个`InMemoryConfig`内类,用于存储和管理配置数据。`InMemoryConfigProvider`通过`volatile`关键字确保其字段在多线程环境下的安全性,并使用`Token`来管理配置更新的线程安全。`Update`方法会更新配置并通知相关的变化,而`SignalChange`方法通过取消取消请求来释放资源。整体设计旨在实现配置的持久性和线程安全。

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();
}
}
}

© 版权声明

相关文章