当前位置: 首页 > news >正文

分布式ID生成框架Leaf升级踩坑

背景:

在项目中需要一个统一的拿单号等唯一ID的服务,就想起了之前用到的leaf,但是因为项目要求,leaf的版本不符合,需要做一些升级

项目地址:https://github.com/Meituan-Dianping/Leaf

升级点:

1,去掉leaf-core项目中pom.xml中的properties配置,统一到parent项目中。

因为都是公用的,所以可以直接去掉。

2,leaf-server项目中改成

<spring-boot-dependencies.version>2.7.17</spring-boot-dependencies.version>

3,修改leaf项目的leaf-parent pom.xml文件

<spring.version>5.3.31</spring.version>
<druid.version>1.2.5</druid.version>
<mysql-connector-java.version>8.0.30</mysql-connector-java.version>

完成上面3个修改点,就可以了

启动配置:

leaf.name=xxx-leaf
leaf.segment.enable=true
leaf.jdbc.url=jdbc:mysql://xxx.xxx.xxx.xxx:3306/leaf?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=UTF8&serverTimezone=UTC&useLocalSessionState=true
leaf.jdbc.username=root
leaf.jdbc.password=xxxxxx

leaf.snowflake.enable=true
leaf.snowflake.zk.address=xxx.xxx.xxx.xxx:2181
leaf.snowflake.port=8102

遇到的问题:

2023-11-30 17:15:41.406 ERROR 31449 --- [           main] c.s.i.l.s.SnowflakeZookeeperHolder       : Start node ERROR {}
java.lang.NumberFormatException: For input string: "leaf/forever/172.20.0.1:8102"at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[na:1.8.0_382]at java.lang.Integer.parseInt(Integer.java:580) ~[na:1.8.0_382]at java.lang.Integer.parseInt(Integer.java:615) ~[na:1.8.0_382]at com.sankuai.inf.leaf.snowflake.SnowflakeZookeeperHolder.init(SnowflakeZookeeperHolder.java:89) ~[leaf-core-1.0.1.jar!/:na]at com.sankuai.inf.leaf.snowflake.SnowflakeIDGenImpl.<init>(SnowflakeIDGenImpl.java:50) [leaf-core-1.0.1.jar!/:na]at com.sankuai.inf.leaf.snowflake.SnowflakeIDGenImpl.<init>(SnowflakeIDGenImpl.java:36) [leaf-core-1.0.1.jar!/:na]at com.sankuai.inf.leaf.server.service.SnowflakeService.<init>(SnowflakeService.java:28) [classes!/:na]at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [na:1.8.0_382]at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) [na:1.8.0_382]at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [na:1.8.0_382]at java.lang.reflect.Constructor.newInstance(Constructor.java:423) [na:1.8.0_382]at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:213) [spring-beans-5.3.31.jar!/:5.3.31]at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87) [spring-beans-5.3.31.jar!/:5.3.31]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1326) [spring-beans-5.3.31.jar!/:5.3.31]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1232) [spring-beans-5.3.31.jar!/:5.3.31]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) [spring-beans-5.3.31.jar!/:5.3.31]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) [spring-beans-5.3.31.jar!/:5.3.31]at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) [spring-beans-5.3.31.jar!/:5.3.31]at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.31.jar!/:5.3.31]at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) [spring-beans-5.3.31.jar!/:5.3.31]at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) [spring-beans-5.3.31.jar!/:5.3.31]at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.31.jar!/:5.3.31]at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) ~[spring-beans-5.3.31.jar!/:5.3.31]at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) ~[spring-beans-5.3.31.jar!/:5.3.31]at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:710) ~[spring-beans-5.3.31.jar!/:5.3.31]at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:693) ~[spring-beans-5.3.31.jar!/:5.3.31]at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.31.jar!/:5.3.31]at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:408) ~[spring-beans-5.3.31.jar!/:5.3.31]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) [spring-beans-5.3.31.jar!/:5.3.31]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) [spring-beans-5.3.31.jar!/:5.3.31]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) [spring-beans-5.3.31.jar!/:5.3.31]at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) [spring-beans-5.3.31.jar!/:5.3.31]at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.31.jar!/:5.3.31]at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) [spring-beans-5.3.31.jar!/:5.3.31]at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) [spring-beans-5.3.31.jar!/:5.3.31]at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) ~[spring-beans-5.3.31.jar!/:5.3.31]at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:929) ~[spring-context-5.3.31.jar!/:5.3.31]at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:591) ~[spring-context-5.3.31.jar!/:5.3.31]at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) ~[spring-boot-2.7.17.jar!/:2.7.17]at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) ~[spring-boot-2.7.17.jar!/:2.7.17]at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:409) ~[spring-boot-2.7.17.jar!/:2.7.17]at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) ~[spring-boot-2.7.17.jar!/:2.7.17]at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300) ~[spring-boot-2.7.17.jar!/:2.7.17]at org.springframework.boot.SpringApplication.run(SpringApplication.java:1289) ~[spring-boot-2.7.17.jar!/:2.7.17]at com.sankuai.inf.leaf.server.LeafServerApplication.main(LeafServerApplication.java:10) ~[classes!/:na]at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_382]at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_382]at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_382]at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_382]at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) ~[leaf.jar:na]at org.springframework.boot.loader.Launcher.launch(Launcher.java:108) ~[leaf.jar:na]at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) ~[leaf.jar:na]at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65) ~[leaf.jar:na]2023-11-30 17:15:41.407 ERROR 31449 --- [           main] c.s.i.l.s.SnowflakeZookeeperHolder       : Read file errorjava.io.FileNotFoundException: /tmp/xxx-leaf/leafconf/8102/workerID.properties (No such file or directory)

解决方法:

1,创建目录/tmp/hub-leaf/leafconf/8102/  (这个8102就是在上面启动配置中的那个port)

2,  创建文件workerID.properties, 内容为workerID=1

再去启动就可以了。

代码地址:

https://download.csdn.net/download/wangerrong/88585488

测试:

1,拿整数ID单号:http://localhost:8101/api/segment/get/order_no_seq  (order_no_seq是leaf_alloc表中新增的biz_tag)

2,拿雪花算法的ID单号: http://localhost:8101/api/snowflake/get/test  (test是可以自己改的,一般是业务场景需要的,比如order)

3,查看单号缓存的监控:http://localhost:8101/cache

相关文章:

分布式ID生成框架Leaf升级踩坑

背景&#xff1a; 在项目中需要一个统一的拿单号等唯一ID的服务&#xff0c;就想起了之前用到的leaf&#xff0c;但是因为项目要求&#xff0c;leaf的版本不符合&#xff0c;需要做一些升级 项目地址&#xff1a;https://github.com/Meituan-Dianping/Leaf 升级点&#xff1…...

常用的设计模式

文章目录 常用的设计模式&#xff1a;一、单例模式3、懒汉式 - 懒汉式非线程安全4、饿汉式 - 线程安全5、懒汉式和饿汉式区别6、双重检查锁定7、应用场景 二、工厂模式1、简单工厂模式2、工厂模式3、抽象工厂4、总结 三、代理模式1、静态代理2、动态代理jdk自带动态代理 3、Cgl…...

git的相关实用命令

参看文章&#xff1a;https://blog.csdn.net/qq_21688871/article/details/130158888 http://www.mobiletrain.org/about/BBS/159885.html 1、git commit后&#xff0c;但发现文件有误&#xff0c;不想push(提交到本地库&#xff0c;回退到暂存区&#xff09; git reset --sof…...

【使用`model.status`来获取gurobi求解过程中的模型状态】

在Gurobi中&#xff0c;你可以使用model.status来获取求解过程中的模型状态。可以使用了model.status来检查模型是否找到最优解。模型状态是一个Gurobi的常量&#xff0c;表示了求解过程中的不同状态。 以下是一些常见的模型状态&#xff1a; GRB.OPTIMAL: 最优解被找到。GRB…...

【UGUI】Unity教程:实现物品的拖拽功能

大家好&#xff0c;今天&#xff0c;我们将一起学习如何在Unity中实现物品的拖拽功能。这是一个非常实用的技能&#xff0c;无论你是在制作RPG游戏的背包系统&#xff0c;还是在制作策略游戏的建筑放置功能&#xff0c;都会用到这个技能。那么&#xff0c;让我们开始吧&#xf…...

【奇淫技巧】两数交换

【奇淫技巧】两数交换 临时变量法&#xff1a;借助中间变量加减法&#xff1a;不使用中间变量异或法&#xff1a;不使用中间变量语法糖&#xff1a;某些编程语言支持交换语法糖借助函数&#xff0c;不交换 前提&#xff1a;待交换的两个元素&#xff0c;分别用a,b表示&#xf…...

Java核心知识点整理大全26-笔记

目录 27. Storm 7.1.1. 概念 27.1.1. 集群架构 27.1.1.1. Nimbus&#xff08;master-代码分发给 Supervisor&#xff09; 27.1.1.2. Supervisor&#xff08;slave-管理 Worker 进程的启动和终止&#xff09; 27.1.1.3. Worker&#xff08;具体处理组件逻辑的进程&#xff…...

“上云”还是“下云”?探云计算的下一站未来!

引言 10 月 27 日&#xff0c;X&#xff08;原Twitter&#xff09;工程技术发布帖子称&#xff0c;在过去的一年里&#xff0c;技术团队优化了 X 的云服务使用方式&#xff0c;着手将更多工作负载迁往本地基础设施。这一转变使 X 每月的云成本降低了 60%。所有媒体、Blob 存储均…...

Linux中top命令输出日志分析?

以下是对输出的各部分的解释&#xff1a; 09:54:34&#xff1a;系统当前时间。up 161 days, 2:08&#xff1a;系统已经运行了161天2小时8分钟。5 users&#xff1a;有5个用户登录系统。load average: 0.13, 0.08, 0.05&#xff1a;系统的1分钟、5分钟、15分钟的平均负载。负载…...

执行栈和执行上下文

前端面试大全JavaScript执行栈和执行上下文 &#x1f31f;经典真题 &#x1f31f;执行上下文 &#x1f31f;栈数据结构 &#x1f31f;执行上下文生命周期 &#x1f31f;真题解答 &#x1f31f;总结 &#x1f31f;经典真题 谈谈你对 JavaScript 执行上下文栈理解 &#…...

7、单片机与W25Q128(FLASH)的通讯(SPI)实验(STM32F407)

SPI接口简介 SPI 是英语Serial Peripheral interface的缩写&#xff0c;顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。 SPI&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且在芯片的管脚上只占用四根…...

stream流和方法引用

1.Stream流 1.1体验Stream流【理解】 案例需求 按照下面的要求完成集合的创建和遍历 创建一个集合&#xff0c;存储多个字符串元素把集合中所有以"张"开头的元素存储到一个新的集合把"张"开头的集合中的长度为3的元素存储到一个新的集合遍历上一步得到的集…...

Redis——某马点评day01——短信登录

项目介绍 导入黑马点评项目 项目架构 基于Session实现登录 基本流程 实现发送短信验证码功能 controller层中 /*** 发送手机验证码*/PostMapping("code")public Result sendCode(RequestParam("phone") String phone, HttpSession session) {// 发送短信…...

AES加密技术:原理与应用

一、引言 随着信息技术的飞速发展&#xff0c;数据安全已成为越来越受到重视的领域。加密技术作为保障数据安全的重要手段&#xff0c;在信息安全领域发挥着举足轻重的作用。AES&#xff08;Advanced Encryption Standard&#xff09;作为一种对称加密算法&#xff0c;自1990年…...

Unity中PlayerPrefs在PC上存储位置总结

编辑器下和EXE存储位置是不同的&#xff0c;这也不难理解&#xff0c;是为了避免存储位置相同导致开发和测试冲突。 编辑器下位置&#xff1a;HKEY_CURRENT_USER\Software\Unity\UnityEditor\ExampleCompanyName\ExampleProductName EXE位置&#xff1a;HKEY_CURRENT_USER\Sof…...

消融实验:深度学习的关键分析工具

消融实验&#xff1a;深度学习的关键分析工具 在深度学习和机器学习领域&#xff0c;消融实验&#xff08;Ablation Study&#xff09;是一种重要的实验方法&#xff0c;用于理解和评估模型的各个组成部分对其整体性能的贡献。通过这种方法&#xff0c;研究人员可以更深入地了…...

Redis缓存——Spring Cache入门学习

Spring Cache 介绍 Spring Cache 是一个框架&#xff0c;实现了基于注解的缓存功能&#xff0c;只需要简单地加一个注解&#xff0c;就能实现缓存功能。 Spring Cache 提供了一层抽象&#xff0c;底层可以切换不同的缓存实现&#xff0c;例如&#xff1a; EHCacheCaffeineR…...

Python标准库copy【侯小啾python领航班系列(十五)】

Python标准库copy【侯小啾python领航班系列(十五)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…...

Android--Jetpack--Lifecycle详解

富贵本无根&#xff0c;尽从勤里得 一&#xff0c;定义 Lifecycle 是一个具备宿主生命周期感知能力的组件。它持有组件&#xff08;Activity/Fragment&#xff09;生命周期状态信息&#xff0c;并且允许其观察者监听宿主生命周期状态变化。 顾名思义&#xff0c;Lifecycle的主…...

LeetCode105.从前序和中序遍历序列构造二叉树

这道题看完题想了几分钟就想到大概的思路了&#xff0c;但是在写的时候有很多细节没注意出了很多问题&#xff0c;然后写了1个多小时&#xff0c;其实这道题挺简单的。 首先&#xff0c;最基本的知识&#xff0c;先序遍历是根左右&#xff0c;中序遍历是左根右&#xff0c;那么…...

千问3.5-9B视觉模型快速部署指南:单卡RTX 4090D实测可用

千问3.5-9B视觉模型快速部署指南&#xff1a;单卡RTX 4090D实测可用 1. 开篇&#xff1a;为什么选择千问3.5-9B视觉模型&#xff1f; 如果你正在寻找一个能够理解图片内容的中文多模态模型&#xff0c;千问3.5-9B视觉版&#xff08;Qwen3.5-9B-VL&#xff09;值得你关注。这个…...

低代码组件“看似简单,上线即崩”?20年专家拆解5个被90%团队忽略的线程安全与事务传播陷阱

第一章&#xff1a;低代码组件“看似简单&#xff0c;上线即崩”的真相低代码平台承诺“拖拽即交付”&#xff0c;但真实生产环境中&#xff0c;大量业务系统在上线后数小时内便出现表单提交失败、数据丢失、权限错乱或页面白屏等问题。这些故障并非源于复杂逻辑&#xff0c;而…...

GitHub资源精准下载:DownGit实现90%带宽节省的技术方案

GitHub资源精准下载&#xff1a;DownGit实现90%带宽节省的技术方案 【免费下载链接】DownGit github 资源打包下载工具 项目地址: https://gitcode.com/gh_mirrors/dow/DownGit 在开源开发流程中&#xff0c;开发者经常需要从GitHub仓库获取特定文件夹资源。传统方式下&…...

Apache Flink Agents 0.2.1 发布公告

Apache Flink 社区很高兴地宣布发布 Apache Flink Agents 0.2 系列的首个缺陷修复版本。 此版本包含 3 项缺陷和漏洞修复以及一些对Flink-Agents 0.2的小幅改进。下面列出了所有缺陷修复和改进内容&#xff08;不包括构建基础设施和构建稳定性方面的改进&#xff09;。如需查看…...

Omni-Vision Sanctuary在嵌入式边缘设备上的轻量化部署思考

Omni-Vision Sanctuary在嵌入式边缘设备上的轻量化部署思考 1. 嵌入式视觉的挑战与机遇 在智能摄像头、工业质检设备、无人机等嵌入式场景中&#xff0c;视觉模型的部署一直面临特殊挑战。传统方案要么性能不足&#xff0c;要么功耗过高&#xff0c;难以平衡实时性与能效比。…...

Java微服务在Istio中出现“偶发503 no healthy upstream”?7分钟定位Sidecar健康检查盲区与Liveness Probe冲突真相

第一章&#xff1a;Java微服务在Istio中偶发503问题的现象与影响在基于Istio构建的服务网格环境中&#xff0c;Java微服务&#xff08;尤其是采用Spring Cloud Kubernetes或原生Spring Boot Istio Sidecar部署模式&#xff09;频繁出现偶发性HTTP 503 Service Unavailable响应…...

PasteMD体验报告:极简界面+强大功能,这才是生产力工具该有的样子

PasteMD体验报告&#xff1a;极简界面强大功能&#xff0c;这才是生产力工具该有的样子 1. 重新定义"文本整理"&#xff1a;当AI成为你的第二大脑 每天&#xff0c;我们都在与各种杂乱文本搏斗&#xff1a;会议速记、技术日志、网页摘录、临时灵感...这些内容往往以…...

JIT热路径识别失效?手撕Python 3.14 _pyjitsymbol.c源码,定位3个未文档化的profile阈值陷阱(内附补丁POC)

第一章&#xff1a;JIT热路径识别失效&#xff1f;手撕Python 3.14 _pyjitsymbol.c源码&#xff0c;定位3个未文档化的profile阈值陷阱&#xff08;内附补丁POC&#xff09;Python 3.14 引入的 _pyjitsymbol JIT 框架在实际压测中频繁出现热路径“失焦”现象&#xff1a;高频率…...

Word文档自动更新日期技巧

设置Word文档自动显示当天日期打开Word文档后&#xff0c;可以通过插入日期字段实现每次打开时自动更新为当天日期。方法1&#xff1a;使用日期字段在Word文档中定位光标到需要显示日期的位置。点击菜单栏"插入"→"文本"→"日期和时间"。在弹出的…...

Nuxt3 + PM2 + Nginx:打造高可用前端部署方案(附常见问题排查指南)

Nuxt3 PM2 Nginx&#xff1a;打造高可用前端部署方案&#xff08;附常见问题排查指南&#xff09; 在当今快速迭代的Web开发领域&#xff0c;Nuxt3凭借其出色的服务端渲染能力和现代化的开发体验&#xff0c;正成为越来越多技术团队的首选框架。然而&#xff0c;将Nuxt3应用部…...