Class IdWorker

java.lang.Object
tech.riemann.etp.IdWorker

public class IdWorker extends Object
Author:
Kerbores(kerbores@riemann.tech)
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final long
     
    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 java.lang.Object

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

  • Constructor Details

    • IdWorker

      public IdWorker(long 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时抛出此异常