美团-Leaf ID算法集成到SpringBoot项目

提前准备

下载源码

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

下载下来 然后 maven install 安装到本地仓库
再需要用到该ID算法的项目中引入 以下内容

xml 复制代码
<!--  本地仓库中的Leaf      -->
<dependency>
    <artifactId>leaf-boot-starter</artifactId>
    <groupId>com.sankuai.inf.leaf</groupId>
    <version>1.0.1-RELEASE</version>
    <!--  这个如无冲突 也无需处理      -->
    <exclusions>
        <exclusion>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
        </exclusion>
    </exclusions>
</dependency>


<!--  以下是在于使用snowflake方案是报错 最后引入这俩解决的 如无问题 可以不做处理     -->
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>2.6.0</version> <!-- 确保版本匹配你的 Spring Boot 版本 -->
</dependency>
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>2.6.0</version>
</dependency>

安装部署zookeeper (segment 无需安装)

下载地址:https://zookeeper.apache.org/releases.html

解压 copy conf中的配置文件

修改zoo.cfg 自定义数据地址

启动zookeeper

bash 复制代码
sh zkServer.sh start

完善leaf.properties文件

java 复制代码
leaf.name=com.sankuai.leaf.opensource.test
leaf.segment.enable=false
leaf.segment.url=
leaf.segment.username=
leaf.segment.password=

leaf.snowflake.enable=false
leaf.snowflake.address=
leaf.snowflake.port=

@EnableLeafServer

Leaf-segment数据库方案

这种方案依赖数据库表

执行以下sql

sql 复制代码
CREATE DATABASE leaf
CREATE TABLE `leaf_alloc` (
  `biz_tag` varchar(128)  NOT NULL DEFAULT '',
  `max_id` bigint(20) NOT NULL DEFAULT '1',
  `step` int(11) NOT NULL,
  `description` varchar(256)  DEFAULT NULL,
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`biz_tag`)
) ENGINE=InnoDB;

insert into leaf_alloc(biz_tag, max_id, step, description) values('leaf-segment-test', 1, 2000, 'Test leaf Segment Mode Get Id')
java 复制代码
import com.pointlion.Application;
import com.sankuai.inf.leaf.common.Result;
import com.sankuai.inf.leaf.service.SegmentService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class IdTest {
   
    @Autowired
    private SegmentService segmentService;
    
    @Test
    public void testSegment() {
        Result id = segmentService.getId("order");
        System.out.println("------------------------------");
        System.out.println(id.getId());
        System.out.println("------------------------------");
    }
}

Leaf-snowflake方案

java 复制代码
import com.pointlion.Application;
import com.sankuai.inf.leaf.common.Result;
import com.sankuai.inf.leaf.service.SnowflakeService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class IdTest {

    @Autowired
    private SnowflakeService snowflakeService;

    @Test
    public void testSnowflake() {
        Result id = snowflakeService.getId("order");
        System.out.println("------------------------------");
        System.out.println(id.getId());
        System.out.println("------------------------------");

    }
}

具体的算法实现讲解

Leaf------美团点评分布式ID生成系统:https://tech.meituan.com/2017/04/21/mt-leaf.html

相关推荐
27669582921 个月前
大众点评 web mtgsig 1.2分析
java·python·node·美团·大众点评·mtgsig
cyt涛1 个月前
主键冲突问题
数据库·mybatis·事务·mybatis-plus·主键·id·冲突
_哲思3 个月前
揭秘2024美团中秋礼盒
美团·中秋节·中秋礼盒
tmax52HZ4 个月前
Leaf分布式ID
uuid·雪花算法·分布式id·snowflake·leaf
CodeSingerAlex4 个月前
Go 语言 UUID 库 google/uuid 源码解析:UUID version7 的实现
开发语言·数据库·后端·golang·uuid·源码解析·id
想要打 Acm 的小周同学呀5 个月前
web前端大作业--美团外卖1
前端·html·课程设计·美团·web而美团
lll...lll6 个月前
美团拼好饭小程序mtgsig1.2分析(补环境分析)
小程序·逆向·美团·mtgsig·1.2·拼好饭
小哈里8 个月前
【笔试】美团2023年秋招第5场笔试(后端&数开&软件方向)
算法·深度优先·笔试·图论·美团
小哈里8 个月前
【笔试】美团2023年秋招第1场笔试(后端&数开&软件方向)
算法·深度优先·笔试·图论·美团