diff --git a/snailmall-keygen-service/src/main/java/com/njupt/swg/keygen/WorkerIDSenquence.java b/snailmall-keygen-service/src/main/java/com/njupt/swg/keygen/WorkerIDSenquence.java index ac3f3b8..af2d980 100644 --- a/snailmall-keygen-service/src/main/java/com/njupt/swg/keygen/WorkerIDSenquence.java +++ b/snailmall-keygen-service/src/main/java/com/njupt/swg/keygen/WorkerIDSenquence.java @@ -15,17 +15,31 @@ import javax.annotation.PostConstruct; /** * 基于ZK节点序列 */ +// 使用@Component注解将该类标记为Spring容器中的一个组件,方便Spring进行管理和依赖注入等操作 @Component +// 使用lombok的@Slf4j注解,用于自动生成日志相关代码,便于在类中记录各种日志信息 @Slf4j public class WorkerIDSenquence { + // 使用@Value注解从Spring配置文件(或环境变量等配置源)中读取名为"zk.host"的配置值,并注入到该变量中, + // 此变量表示Zookeeper服务器的主机地址,用于后续连接Zookeeper @Value("${zk.host}") private String ZkHost ; + // 定义一个静态的常量字符串,表示在Zookeeper中的节点路径,用于存放与雪花算法工作ID相关的信息, + // 这里的路径是固定的,后续操作会基于此路径在Zookeeper中进行节点的创建、查询等操作 private static final String ZK_PATH = "/snowflake/workID"; + // 定义一个静态的CuratorFramework类型的变量,CuratorFramework是用于操作Zookeeper的客户端框架, + // 在这里用于与Zookeeper服务器进行交互,比如创建节点、查询节点等,此处先声明,后续在初始化方法中进行实例化并启动 private static CuratorFramework client; + /** + * 该方法使用了@PostConstruct注解,意味着此方法会在类实例化且依赖注入完成后自动被调用,用于初始化Zookeeper相关节点 + * 首先通过CuratorFrameworkFactory创建一个连接到Zookeeper服务器的客户端实例,配置了重试策略(最多重试10次,每次间隔5000毫秒) + * 然后启动客户端连接,连接成功后会在日志中记录相应信息,接着检查在Zookeeper中指定的节点路径(ZK_PATH)是否存在, + * 如果不存在,则创建该节点,并设置节点的创建模式为持久化(CreateMode.PERSISTENT),确保节点在服务器重启等情况下依然存在 + */ @PostConstruct void initZKNode() throws Exception { client = CuratorFrameworkFactory.newClient(ZkHost,new RetryNTimes(10, 5000)); @@ -37,6 +51,13 @@ public class WorkerIDSenquence { } } + /** + * 该方法用于获取一个序列值,这个序列值可能用于雪花算法中的工作ID分配等场景 + * 首先判断传入的主机名(hostname)是否为空,如果为空则设置一个默认的主机名"snowflake_" + * 然后通过Zookeeper客户端在指定的节点路径(ZK_PATH)下创建一个临时顺序节点(CreateMode.EPHEMERAL_SEQUENTIAL), + * 节点的完整路径会基于传入的主机名进行拼接,创建成功后,从节点路径字符串中提取最后四位数字作为序列值(这里假设节点路径命名有一定规范), + * 最后将提取到的序列值以长整型的形式返回,这个序列值可用于后续相关业务逻辑,比如作为工作ID的一部分等 + */ public long getSequence(String hostname) throws Exception { if(StringUtils.isBlank(hostname)){ hostname = "snowflake_";