diff --git a/README.md b/README.md index 65d3e5e..349f7dd 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ 1.js Number 类型最大数值:9007199254740992,本算法在保持并发性能(5W+/0.01s)和最大64个 WorkerId(6bit)的同时,能用70年才到 js Number Max 值。 -2.增加WorkerId位数到8bit(128节点)时,15年达到 js Number Max 值。 +2.增加WorkerId位数到8bit(256节点)时,15年达到 js Number Max 值。 3.极致性能:500W/1s。 @@ -167,14 +167,14 @@ ``` // 全局初始化设置WorkerId,默认最大2^16-1。(初始化过程全局只需一次,且必须最先设置) var options = new IdGeneratorOptions(){ WorkerId = 1}; -YidHelper.SetIdGenerator(options); +IdHelper.SetIdGenerator(options); // 初始化以后,就可以在需要的地方调用方法生成ID。 -var newId = YidHelper.NextId(); +var newId = IdHelper.NextId(); -// 可通过 YidHelper.IdGenInstance 订阅 GenIdActionAsync 事件。 +// 可通过 IdHelper.IdGenInstance 订阅 GenIdActionAsync 事件。 ``` -如果基于DI框架集成,可以参考 YidHelper 去管理 IdGenerator 对象,必须使用**单例**模式。 +如果基于DI框架集成,可以参考 IdHelper 去管理 IdGenerator 对象,必须使用**单例**模式。 #### options说明 ``` diff --git a/src/Yitter.IdGenerator.sln b/src/Yitter.IdGen.sln similarity index 100% rename from src/Yitter.IdGenerator.sln rename to src/Yitter.IdGen.sln diff --git a/src/Yitter.IdGenTest/Program.cs b/src/Yitter.IdGenTest/Program.cs index 52c0387..ef0af92 100644 --- a/src/Yitter.IdGenTest/Program.cs +++ b/src/Yitter.IdGenTest/Program.cs @@ -44,13 +44,13 @@ namespace Yitter.OrgSystem.TestA WorkerId = 1, TopOverCostCount = 2000, - //WorkerIdBitLength = 6, - //SeqBitLength = 6, + WorkerIdBitLength = 10, + SeqBitLength = 6, //MinSeqNumber = 11, //MaxSeqNumber = 200, - //StartTime = DateTime.Now.AddYears(-1), + StartTime = DateTime.Now.AddYears(-5), }; // ++++++++++++++++++++++++++++++++ @@ -59,7 +59,7 @@ namespace Yitter.OrgSystem.TestA IdGeneratorOptions options1 = (newConfig); if (IdGen == null) { - IdGen = new YidGenerator(options1); + IdGen = new DefaultIdGenerator(options1); } if (outputLog) @@ -105,7 +105,7 @@ namespace Yitter.OrgSystem.TestA }; Console.WriteLine("Gen:" + i); - var idGen2 = new YidGenerator(options); + var idGen2 = new DefaultIdGenerator(options); var test = new GenTest(idGen2, genIdCount, i); if (outputLog) diff --git a/src/Yitter.IdGenerator/IIdGenerator.cs b/src/Yitter.IdGenerator/Contract/IIdGenerator.cs similarity index 72% rename from src/Yitter.IdGenerator/IIdGenerator.cs rename to src/Yitter.IdGenerator/Contract/IIdGenerator.cs index d96e225..22bd86e 100644 --- a/src/Yitter.IdGenerator/IIdGenerator.cs +++ b/src/Yitter.IdGenerator/Contract/IIdGenerator.cs @@ -13,8 +13,15 @@ namespace Yitter.IdGenerator { public interface IIdGenerator { + /// + /// 生成过程中产生的事件 + /// Action GenIdActionAsync { get; set; } + /// + /// 生成新的long型Id + /// + /// long NewLong(); // Guid NewGuid(); diff --git a/src/Yitter.IdGenerator/ISnowWorker.cs b/src/Yitter.IdGenerator/Contract/ISnowWorker.cs similarity index 100% rename from src/Yitter.IdGenerator/ISnowWorker.cs rename to src/Yitter.IdGenerator/Contract/ISnowWorker.cs diff --git a/src/Yitter.IdGenerator/IdGeneratorOptions.cs b/src/Yitter.IdGenerator/Contract/IdGeneratorOptions.cs similarity index 100% rename from src/Yitter.IdGenerator/IdGeneratorOptions.cs rename to src/Yitter.IdGenerator/Contract/IdGeneratorOptions.cs diff --git a/src/Yitter.IdGenerator/OverCostActionArg.cs b/src/Yitter.IdGenerator/Contract/OverCostActionArg.cs similarity index 66% rename from src/Yitter.IdGenerator/OverCostActionArg.cs rename to src/Yitter.IdGenerator/Contract/OverCostActionArg.cs index 2bd0745..84d3e84 100644 --- a/src/Yitter.IdGenerator/OverCostActionArg.cs +++ b/src/Yitter.IdGenerator/Contract/OverCostActionArg.cs @@ -13,13 +13,35 @@ using System.Text; namespace Yitter.IdGenerator { + /// + /// Id生成时回调参数 + /// public class OverCostActionArg { + /// + /// 事件类型 + /// 1-开始,2-结束,8-漂移 + /// public int ActionType { get; set; } + /// + /// 时间戳 + /// public long TimeTick { get; set; } + /// + /// 机器码 + /// public ushort WorkerId { get; set; } + /// + /// 漂移计算次数 + /// public int OverCostCountInOneTerm { get; set; } + /// + /// 漂移期间生产ID个数 + /// public int GenCountInOneTerm { get; set; } + /// + /// 漂移周期 + /// public int TermIndex { get; set; } public OverCostActionArg(ushort workerId, long timeTick, int actionType = 0, int overCostCountInOneTerm = 0, int genCountWhenOverCost = 0,int index=0) diff --git a/src/Yitter.IdGenerator/SnowWorkerM1.cs b/src/Yitter.IdGenerator/Core/SnowWorkerM1.cs similarity index 100% rename from src/Yitter.IdGenerator/SnowWorkerM1.cs rename to src/Yitter.IdGenerator/Core/SnowWorkerM1.cs diff --git a/src/Yitter.IdGenerator/SnowWorkerM2.cs b/src/Yitter.IdGenerator/Core/SnowWorkerM2.cs similarity index 100% rename from src/Yitter.IdGenerator/SnowWorkerM2.cs rename to src/Yitter.IdGenerator/Core/SnowWorkerM2.cs diff --git a/src/Yitter.IdGenerator/YidGenerator.cs b/src/Yitter.IdGenerator/DefaultIdGenerator.cs similarity index 78% rename from src/Yitter.IdGenerator/YidGenerator.cs rename to src/Yitter.IdGenerator/DefaultIdGenerator.cs index c7be142..deb6ed7 100644 --- a/src/Yitter.IdGenerator/YidGenerator.cs +++ b/src/Yitter.IdGenerator/DefaultIdGenerator.cs @@ -14,7 +14,10 @@ using System.Threading; namespace Yitter.IdGenerator { - public class YidGenerator : IIdGenerator + /// + /// 默认实现 + /// + public class DefaultIdGenerator : IIdGenerator { private ISnowWorker _SnowWorker { get; set; } @@ -25,7 +28,7 @@ namespace Yitter.IdGenerator } - public YidGenerator(IdGeneratorOptions options) + public DefaultIdGenerator(IdGeneratorOptions options) { if (options == null) { @@ -45,24 +48,24 @@ namespace Yitter.IdGenerator var maxWorkerIdNumber = Math.Pow(2, options.WorkerIdBitLength) - 1; if (options.WorkerId < 1 || options.WorkerId > maxWorkerIdNumber) { - throw new ApplicationException("WorkerId is error. (range:[1, " + maxWorkerIdNumber + "]"); + throw new ApplicationException("WorkerId error. (range:[1, " + maxWorkerIdNumber + "]"); } if (options.SeqBitLength < 2 || options.SeqBitLength > 21) { - throw new ApplicationException("SeqBitLength is error. (range:[2, 21])"); + throw new ApplicationException("SeqBitLength error. (range:[2, 21])"); } var maxSeqNumber = Math.Pow(2, options.SeqBitLength) - 1; if (options.MaxSeqNumber < 0 || options.MaxSeqNumber > maxSeqNumber) { - throw new ApplicationException("MaxSeqNumber is error. (range:[1, " + maxSeqNumber + "]"); + throw new ApplicationException("MaxSeqNumber error. (range:[1, " + maxSeqNumber + "]"); } var maxValue = maxSeqNumber - 2; if (options.MinSeqNumber < 5 || options.MinSeqNumber > maxValue) { - throw new ApplicationException("MinSeqNumber is error. (range:[5, " + maxValue + "]"); + throw new ApplicationException("MinSeqNumber error. (range:[5, " + maxValue + "]"); } switch (options.Method) diff --git a/src/Yitter.IdGenerator/YidHelper.cs b/src/Yitter.IdGenerator/IdHelper.cs similarity index 77% rename from src/Yitter.IdGenerator/YidHelper.cs rename to src/Yitter.IdGenerator/IdHelper.cs index 83960de..2354882 100644 --- a/src/Yitter.IdGenerator/YidHelper.cs +++ b/src/Yitter.IdGenerator/IdHelper.cs @@ -16,17 +16,11 @@ namespace Yitter.IdGenerator /// /// 这是一个调用的例子,默认情况下,单机集成者可以直接使用 NewId()。 /// - public class YidHelper + public class IdHelper { private static IIdGenerator _IdGenInstance = null; - public static IIdGenerator IdGenInstance - { - get - { - return _IdGenInstance; - } - } + public static IIdGenerator IdGenInstance => _IdGenInstance; /// /// 设置参数,建议程序初始化时执行一次 @@ -34,7 +28,7 @@ namespace Yitter.IdGenerator /// public static void SetIdGenerator(IdGeneratorOptions options) { - _IdGenInstance = new YidGenerator(options); + _IdGenInstance = new DefaultIdGenerator(options); } /// @@ -47,7 +41,9 @@ namespace Yitter.IdGenerator { if (_IdGenInstance == null) { - _IdGenInstance = new YidGenerator(new IdGeneratorOptions() { WorkerId = 1 }); + _IdGenInstance = new DefaultIdGenerator( + new IdGeneratorOptions() { WorkerId = 1 } + ); } return _IdGenInstance.NewLong(); diff --git a/src/Yitter.IdGenerator/Yitter.IdGenerator.csproj b/src/Yitter.IdGenerator/Yitter.IdGenerator.csproj index ef2d4c2..4cafd7e 100644 --- a/src/Yitter.IdGenerator/Yitter.IdGenerator.csproj +++ b/src/Yitter.IdGenerator/Yitter.IdGenerator.csproj @@ -12,7 +12,4 @@ 5 - - -