# snowflake **Repository Path**: gmmp/snowflake ## Basic Information - **Project Name**: snowflake - **Description**: 基于Snowflake算法的发号器,k8s容器化扩容时唯一的机器Id生成的解决方案,集成在spring boot的示例 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: http://www.javamall.com.cn - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 9 - **Created**: 2020-06-10 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # snowflake sn creater #### 介绍 基于Snowflake算法的发号器,包括集成在spring boot的示例。 本代码适合将发号器嵌入在应用内部,而非独立的生成器app。 ![image-20200420120645877](README.assets/image-20200420120645877.png) #### 侧重点 采用Snowflake算法,主要目的放在解决机器id的生成方面。 尤其是在基于容器(docker、k8s)等部署时,自动扩容机器id自动生成、唯一性的保证。 ![image-20200420121044889](README.assets/image-20200420121044889.png) #### 思路 难点在于扩容时,产生的一个app多个实例。 通过的app启动时在redis中注册自己,同时存在一个心跳,定时向redis中报告自己的存活。 如果挂掉,reids里面清掉自己的实例,根据实例的情况运算workid。 #### 使用 ~~~java @Autowired SnCreator snCreator; public String test() { String id = snCreator.create(1); return id; } ~~~ 其中create的参数是子业务id,不同模块调用时加以区分。 #### 整合 如果要整合进自己的app,参考JavashopAppRunner,使应用在启动时,注册自己的实例: ~~~java @Component @Order(value = 1) public class JavashopAppRunner implements ApplicationRunner { @Autowired protected InstanceContext instanceContext; @Override public void run(ApplicationArguments args) throws Exception { //注册本实例 instanceContext.register(); } } ~~~ [Javashop开源出品](https://www.javamall.com.cn)