Skip to content

LemonNoCry/SnowflakeId.AutoRegister

Repository files navigation

Snowflake Id(雪花Id) 自动注册

Latest version License LGPLv3 Coverity Scan

这是一个自动注册 SnowflakeId 的 WorkerId 的 C# 库,支持 SQL Server、Redis 等。
它本身不提供 SnowflakeId 的生成功能,只帮助你自动注册 WorkerId。
理论上,SnowflakeId AutoRegister 可以与任何使用 SnowflakeId 的库集成。

入门指南

SnowflakeId AutoRegister 是一个库,提供了一种简单的方法在 SnowflakeId 中自动注册 WorkerId。
它本身不生成 Snowflake Id,只帮助你自动注册 WorkerId。

核心

  • .NETStandard 2.0
  • 支持 Redis
  • 支持 SQL Server
  • 未来更新将支持更多存储机制

安装

SnowflakeId.AutoRegister 作为 NuGet 包提供。你可以使用 NuGet 包管理控制台安装它:

安装核心包

Install-Package SnowflakeId.AutoRegister

使用 Redis

Install-Package SnowflakeId.AutoRegister.Redis

使用 SqlServer

Install-Package SnowflakeId.AutoRegister.SqlServer

使用方法

使用 AutoRegisterBuilder 构建 IAutoRegister 的单例实例。

static readonly IAutoRegister AutoRegister = new AutoRegisterBuilder()
    // 注册选项
    // 使用以下行设置标识符。
    // 推荐设置以区分单台机器上的多个应用程序
    .SetExtraIdentifier(Environment.CurrentDirectory)
    // 使用以下行设置 WorkerId 范围。
    .SetWorkerIdScope(1, 31)
    // 使用以下行设置注册选项。
    // .SetRegisterOption(option => {})

    // 使用以下行使用默认存储。
    // 仅适用于开发使用、本地测试等。
    //.UseDefaultStore()
        
    // 使用以下行使用 Redis 存储。
    .UseRedisStore("localhost:6379,allowAdmin=true")
       
    // 使用以下行使用 SQL Server 存储。
    //.UseSqlServerStore("Server=localhost;Database=IdGenerator;User Id=sa;Password=123456;")
    .Build();

使用 AutoRegister 实例获取 SnowflakeIdConfig

// 注册 WorkerId。
SnowflakeIdConfig config = AutoRegister.Register();
Console.WriteLine($"WorkerId: {config.WorkerId}");

程序退出主动卸载 WorkerId。

//主动注销WorkId,程序退出时调用
//如果程序异常退出,下次启动时会自动尝试获取上次的WorkerId,如果获取失败会重新注册
AutoRegister.UnRegister();

//可以使用AppDomain.CurrentDomain.ProcessExit事件
AppDomain.CurrentDomain.ProcessExit += (_, _) =>
{
    builder.UnRegister();
    Console.WriteLine("Unregistered.");
};

//.Net Core及以上版本可以使用ApplicationStopping事件
applicationLifetime.ApplicationStopping.Register(() =>
{
    builder.UnRegister();
    Console.WriteLine("Unregistered.");
});

Yitter.IdGenerator 自动注册

var config = AutoRegister.Register();
var options = new IdGeneratorOptions
{
    WorkerId = (ushort)config.WorkerId,
};
IIdGenerator idGenInstance = new DefaultIdGenerator(options);
long id = idGenInstance.NewLong();
Console.WriteLine($"Id: {id}");

其他自动注册

对于其他 Snowflake ID 生成库,请参考 Yitter.IdGenerator 示例。

构建源码

克隆仓库:

git clone https://github.com/LemonNoCry/SnowflakeId.AutoRegister.git

导航到项目目录:

cd SnowflakeId.AutoRegister 

恢复包:

dotnet restore 

构建项目:

dotnet build

贡献

欢迎提交拉取请求。如果有重大更改,请先打开一个 Issue 讨论你想要更改的内容。 请确保适当更新测试。

许可证

MIT

About

C# library for automatic registration of WorkerId in SnowflakeId systems

Resources

License

Stars

Watchers

Forks

Packages

No packages published