Skip to content

kirov-opensource/acm

Repository files navigation

Kirov.Extensions.ACM

NuGet NuGet GitHub issues GitHub repo size in bytes GitHub top language

不要继续使用ACM,阿里云ACM2022年下线,此项目生命周期已结束。

为了能够实时从远程变更项目的配置以及实现统一管理,所以将项目的配置统一获取,ACM实现了调用方只需要填写远程服务器地址和授权信息,就能够实时获取到最新的配置信息,而无需关心如何获取.

Vendor Support
阿里云

如何使用

ASP.NET Framework

var config = new AliyunConfig
{
    Namespace = "",
    AccessKey = "",
    SecretKey = "",
    DNS = "acm.aliyun.com",
    ListenerInterval = 30,
    Port = "8080",
    DataId = "",
    Group = ""
};
var client = new AliyunClient(config);
//可选事件,当内部发生错误时回调此事件。可通过此事件进行日志记录等处理。
//当发生错误时,ACM会忽略此次错误继续运行。这意味着在网络不通的情况下,此回调函数会被重复回调。
client.ExceptionEvent += (ex) =>
{
    Console.WriteLine($"出现异常:{ex.Message}");
};
//开始监听远程配置变更
client.Start(() => { return File.ReadAllText("Config/Config.yml"); }, (content) =>
 {
     //此为配置发生变更的回调方法
     //content为远程配置文件内容
     Console.WriteLine("============Config Changed============");
     File.WriteAllText("Config/Config.yml", content);
     Console.WriteLine(content);
 });

对于运行在IIS上的应用程序, 如果ACM程序在Web Site停止的时候还在工作, 则会影响IIS程序池回收, 所以需要使用取消令牌用来控制ACM后台任务的停止.

//创建令牌, 最好使用静态变量保存它, 以便在程序停止时取消令牌
static CancellationTokenSource tokenSource = new CancellationTokenSource();
//开始监听远程配置变更
client.Start(() => { return File.ReadAllText("Config/Config.yml"); }, (content) =>
 {
     //此为配置发生变更的回调方法
     //content为远程配置文件内容
     Console.WriteLine("============Config Changed============");
     File.WriteAllText("Config/Config.yml", content);
     Console.WriteLine(content);
 }, 
 //传入令牌
 tokenSource.Token);

Global.asax.cs

//在程序终止时取消ACM后台任务
public void Application_End(){


}

ASP.NET Core

先决条件

ACM的相关配置是从环境变量读取的,因此需要配置以下环境变量,带*为必须。
  • * ASPNETCORE_ACM_ALIYUN_NAMESPACE
  • * ASPNETCORE_ACM_ALIYUN_ACCESS_KEY
  • * ASPNETCORE_ACM_ALIYUN_SECRET_KEY
  • * ASPNETCORE_ACM_ALIYUN_DATA_ID
  • * ASPNETCORE_ACM_ALIYUN_GROUP
  • ASPNETCORE_ACM_ALIYUN_DNS 可不配置,默认值为acm.aliyun.com
  • ASPNETCORE_ACM_ALIYUN_PORT 可不配置,默认值为8080
  • ASPNETCORE_ACM_ALIYUN_LISTENER_INTERVAL 可不配置,默认值为30

Startup.cs配置ACM Client

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
}

public IConfiguration Configuration { get; }

public void ConfigureServices(IServiceCollection services)
{
    //应当确保ACM的配置始在所有配置的最开始
    services.AddAliyunACM(Configuration, (ex) =>
    {   
        //错误回调
        System.Console.WriteLine(ex.Message);
    });
}

构建和发布

  • 构建nupkg
    • 使用scripts/nuget_pack.bat即可将项目打包成nupkg.