雪花漂移ID,Yitter.IdGenerator 封装成一个适用于 ASP.NET Core 6.0 的服务组件
封装目标
-
在
Program.cs中注册服务 -
提供一个
IIdGenerator接口 -
实现类使用
Yitter.IdGenerator生成唯一 ID -
支持依赖注入,方便在 Controller、Service 中调用
安装程序包:
dotnet add package Yitter.IdGenerator
定义接口:
public interface IIdGenerator
{
long NewId();
}
实现接口:
using Yitter.IdGenerator;
public class YitterIdGenerator : IIdGenerator
{
public YitterIdGenerator()
{
var options = new IdGeneratorOptions(workerId: 1); // WorkerId 可根据部署环境动态设置
YitIdHelper.SetIdGenerator(options);
}
public long NewId()
{
return YitIdHelper.NextId();
}
}
在 Program.cs 中注册服务
builder.Services.AddSingleton<IIdGenerator, YitterIdGenerator>();
在 Controller 或 Service 中使用
public class OrderService
{
private readonly IIdGenerator _idGenerator;
public OrderService(IIdGenerator idGenerator)
{
_idGenerator = idGenerator;
}
public void CreateOrder()
{
long orderId = _idGenerator.NewId();
Console.WriteLine($"新订单 ID: {orderId}");
}
}
可选扩展:WorkerId 自动分配
如果你部署在 Kubernetes 或容器环境,可以考虑通过环境变量或 Redis 分布式锁自动分配 WorkerId,避免冲突。
引用:
https://github.com/yitter/IdGenerator/blob/master/C%23/source/Yitter.IdGenerator/YitIdHelper.cs
https://github.com/yitter/idgenerator
浙公网安备 33010602011771号