启动Leaf-snowflake模式也比较简单,起动本地ZooKeeper,修改一下项目中的leaf.properties文件,关闭leaf.segment模式,启用leaf.snowflake模式即可。
leaf.segment.enable=false #leaf.jdbc.url=jdbc:mysql://127.0.0.1:3306/xin-master?useUnicode=true&characterEncoding=utf8 #leaf.jdbc.username=junkang #leaf.jdbc.password=junkang leaf.snowflake.enable=true leaf.snowflake.zk.address=127.0.0.1 leaf.snowflake.port=2181 /** * 雪花算法模式 * @param key * @return */ @RequestMapping(value = "/api/snowflake/get/{key}") public String getSnowflakeId(@PathVariable("key") String key) { return get(key, snowflakeService.getId(key)); }测试一下,访问::8080/api/snowflake/get/leaf-segment-test
优点:
ID号码是趋势递增的8byte的64位数字,满足上述数据库存储的主键要求。
缺点:
依赖ZooKeeper,存在服务不可用风险(实在不知道有啥缺点了)
三、Leaf监控请求地址::8080/cache
针对服务自身的监控,Leaf提供了Web层的内存数据映射界面,可以实时看到所有号段的下发状态。比如每个号段双buffer的使用情况,当前ID下发到了哪个位置等信息都可以在Web界面上查看。
总结对于Leaf具体使用哪种模式,还是根据具体的业务场景使用,本文并没有对Leaf源码做过多的分析,因为Leaf 代码量简洁很好阅读。后续还会把其他几种分布式ID生成器,依次结合实战介绍给大家,欢迎大家关注。