Class IdWorker

java.lang.Object
tech.riemann.nif.utils.IdWorker

public class IdWorker extends Object
ID生成器,基于Snowflake算法实现,用于生成唯一ID
Author:
Kerbores(kerbores@riemann.tech)
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final long
    最大工作节点ID
    static final long
    序列号掩码
  • Constructor Summary

    Constructors
    Constructor
    Description
    IdWorker(long workerId)
    构造函数
  • Method Summary

    Modifier and Type
    Method
    Description
    long
    生成下一个ID 本方法通过时间戳、工作ID和序列号的组合来生成唯一的ID 它是线程安全的,确保在多线程环境下可以安全生成ID
    生成EC专用的唯一ID 该方法通过同步方式确保线程安全,并基于时间戳、workerId和序列号生成一个唯一的ID 当时间戳相同时,会递增序列号;当时间戳回退时,会抛出异常以防止生成重复的ID 如果时间戳相同且序列号达到最大值时,会等待直到时间戳改变

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • MAX_WORKER_ID

      public static final long MAX_WORKER_ID
      最大工作节点ID
      See Also:
    • SEQUENCE_MASK

      public static final long SEQUENCE_MASK
      序列号掩码
      See Also:
  • Constructor Details

    • IdWorker

      public IdWorker(long workerId)
      构造函数
      Parameters:
      workerId - 工作节点ID
      Throws:
      IllegalArgumentException - 如果workerId超出范围
  • Method Details

    • nextId

      public long nextId()
      生成下一个ID 本方法通过时间戳、工作ID和序列号的组合来生成唯一的ID 它是线程安全的,确保在多线程环境下可以安全生成ID
      Returns:
      生成的下一个ID
      Throws:
      IllegalStateException - 如果时钟回退,即当前时间戳小于上一个时间戳,则抛出异常
    • nextIdForEc

      public String nextIdForEc()
      生成EC专用的唯一ID 该方法通过同步方式确保线程安全,并基于时间戳、workerId和序列号生成一个唯一的ID 当时间戳相同时,会递增序列号;当时间戳回退时,会抛出异常以防止生成重复的ID 如果时间戳相同且序列号达到最大值时,会等待直到时间戳改变
      Returns:
      唯一ID,格式为当前年月加上一个长整型数字
      Throws:
      IllegalStateException - 如果时间戳回退且无法生成新的ID时抛出此异常