Browse Source

feat: 添加雪花算法

main-10.0.0
wangjunzzz 2 months ago
parent
commit
c06c4d776b
  1. 1
      aspnet-core/Directory.Build.targets
  2. 3
      aspnet-core/Lion.AbpPro.slnx
  3. 16
      aspnet-core/frameworks/src/Lion.AbpPro.IdGenerator/Lion.AbpPro.IdGenerator.csproj
  4. 22
      aspnet-core/frameworks/src/Lion.AbpPro.IdGenerator/Lion/AbpPro/IdGenerator/AbpProIdGeneratorModule.cs
  5. 1
      aspnet-core/frameworks/test/Lion.AbpPro.Core.Tests/Lion.AbpPro.Core.Tests.csproj
  6. 6
      aspnet-core/frameworks/test/Lion.AbpPro.Core.Tests/Lion/AbpPro/Core/AbpProTestBaseModule.cs
  7. 24
      aspnet-core/frameworks/test/Lion.AbpPro.Core.Tests/Lion/AbpPro/IdGenerator/IdGeneratorTests.cs

1
aspnet-core/Directory.Build.targets

@ -114,5 +114,6 @@
<PackageReference Update="Mapster" Version="7.4.0" />
<PackageReference Update="Yitter.IdGenerator" Version="1.0.14" />
</ItemGroup>
</Project>

3
aspnet-core/Lion.AbpPro.slnx

@ -24,6 +24,7 @@
<Project Path="frameworks/src/Lion.AbpPro.Localization/Lion.AbpPro.Localization.csproj" />
<Project Path="frameworks/src/Lion.AbpPro.SignalR/Lion.AbpPro.SignalR.csproj" />
<Project Path="frameworks/src/Lion.AbpPro.Starter/Lion.AbpPro.Starter.csproj" />
<Project Path="frameworks\src\Lion.AbpPro.IdGenerator\Lion.AbpPro.IdGenerator.csproj" Type="Classic C#" />
</Folder>
<Folder Name="/frameworks/test/">
<Project Path="frameworks/test/Lion.AbpPro.Core.Tests/Lion.AbpPro.Core.Tests.csproj" />
@ -150,4 +151,4 @@
<Project Path="services/test/Lion.AbpPro.HttpApi.Client.ConsoleTestApp/Lion.AbpPro.HttpApi.Client.ConsoleTestApp.csproj" />
<Project Path="services/test/Lion.AbpPro.TestBase/Lion.AbpPro.TestBase.csproj" />
</Folder>
</Solution>
</Solution>

16
aspnet-core/frameworks/src/Lion.AbpPro.IdGenerator/Lion.AbpPro.IdGenerator.csproj

@ -0,0 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace/>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Lion.AbpPro.Core\Lion.AbpPro.Core.csproj"/>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Yitter.IdGenerator"/>
</ItemGroup>
</Project>

22
aspnet-core/frameworks/src/Lion.AbpPro.IdGenerator/Lion/AbpPro/IdGenerator/AbpProIdGeneratorModule.cs

@ -0,0 +1,22 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Volo.Abp.Modularity;
using Yitter.IdGenerator;
namespace Lion.AbpPro.IdGenerator;
public class AbpProIdGeneratorModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
var logger = context.Services.BuildServiceProvider().GetRequiredService<ILogger<AbpProIdGeneratorModule>>();
// 从环境变量或配置文件读取 WorkerId, 如果没有则随机生成从0-63 随机获取一个
var workerId = Environment.GetEnvironmentVariable("WORKER_ID") ?? new Random().Next(0, 64).ToString();
logger.LogInformation($"当前雪花算法WorkerId: {workerId}");
var options = new IdGeneratorOptions
{
WorkerId = ushort.Parse(workerId)
};
YitIdHelper.SetIdGenerator(options);
}
}

1
aspnet-core/frameworks/test/Lion.AbpPro.Core.Tests/Lion.AbpPro.Core.Tests.csproj

@ -22,6 +22,7 @@
<ItemGroup>
<ProjectReference Include="..\..\src\Lion.AbpPro.Core\Lion.AbpPro.Core.csproj" />
<ProjectReference Include="..\..\src\Lion.AbpPro.IdGenerator\Lion.AbpPro.IdGenerator.csproj" />
</ItemGroup>
</Project>

6
aspnet-core/frameworks/test/Lion.AbpPro.Core.Tests/Lion/AbpPro/Core/AbpProTestBaseModule.cs

@ -1,11 +1,13 @@
using Volo.Abp;
using Lion.AbpPro.IdGenerator;
using Volo.Abp;
using Volo.Abp.Autofac;
using Volo.Abp.Modularity;
namespace Lion.AbpPro.Core
{
[DependsOn(typeof(AbpTestBaseModule),
typeof(AbpAutofacModule))]
typeof(AbpAutofacModule),
typeof(AbpProIdGeneratorModule))]
public class AbpProTestBaseModule : AbpModule
{
}

24
aspnet-core/frameworks/test/Lion.AbpPro.Core.Tests/Lion/AbpPro/IdGenerator/IdGeneratorTests.cs

@ -0,0 +1,24 @@
using Lion.AbpPro.Core;
using Xunit.Abstractions;
using Yitter.IdGenerator;
namespace Lion.AbpPro.IdGenerator;
public class IdGeneratorTests : AbpProTestBase
{
private readonly ITestOutputHelper _testOutputHelper;
public IdGeneratorTests(ITestOutputHelper testOutputHelper)
{
_testOutputHelper = testOutputHelper;
}
[Fact]
public void NextId()
{
for (int j = 0; j < 1000; j++)
{
_testOutputHelper.WriteLine(YitIdHelper.NextId().ToString());
}
}
}
Loading…
Cancel
Save