学以致用是学习的目的,之前看了很多关于分布式ID生成器的方案,然后根据各种方案和自己的所学写了一个分布式ID生成器rain,rain提供了高可用和高并发,同时提供了JavaSDK和Restful接口进行调用。下面看一下如何使用 Tips:项目代码https:github。commxsmrainrain 分布式全局ID生成服务,ID生成分为两个模式:segment(分段模式)snowflake(雪花算法) 如何使用看如下介绍。QuickStart1。安装依赖JDK11MySQL8Maven3。8。5 安装好相关的依赖。2。数据库初始化2。1创建表 运行一下sql脚本创建对应的数据库和表,脚本如下:DROPDATABASEIFEXISTSCREATEDATABASEDROPTABLEIFEXISTSCREATETABLEmxsmallocation(idbigintNOTNULLAUTOINCREMENTCOMMENT主键ID,bizcodevarchar(128)COLLATEutf8mb4generalciNOTNULLCOMMENT业务编码(用户ID,使用业务方编码),maxidbigintNOTNULLDEFAULT1COMMENT最大值,stepintNOTNULLCOMMENT步长,descriptionvarchar(255)COLLATEutf8mb4generalciDEFAULTCOMMENT说明,createtimetimestampNOTNULLCOMMENT创建时间,updatetimetimestampNOTNULLONUPDATECURRENTTIMESTAMPCOMMENT更新时间,PRIMARYKEY(id),UNIQUEKEYbizcodeindex(bizcode)USINGBTREE)ENGINEInnoDBDEFAULTCHARSETutf8mb4COLLATEutf8mb4DROPTABLEIFEXISTSCREATETABLEmxsmsnowfalkenode(idbigintNOTNULLAUTOINCREMENTCOMMENT主键ID,hostnamebigintNOTNULLCOMMENTIP地址,portintNOTNULLDEFAULT1COMMENT端口,deployenvtypeenum(ACTUAL,CONTAINER)COLLATEutf8mb4generalciDEFAULTACTUALCOMMENT部署环境类型,descriptionvarchar(255)COLLATEutf8mb4generalciDEFAULTCOMMENT说明,createtimetimestampNOTNULLCOMMENT创建时间,updatetimetimestampNOTNULLONUPDATECURRENTTIMESTAMPCOMMENT更新时间,PRIMARYKEY(id),UNIQUEKEYmixindex(hostname,port)USINGBTREE)ENGINEInnoDBDEFAULTCHARSETutf8mb4COLLATEutf8mb43。rain部署启动3。1通过提供的Package 第一步:下载binarypackage 可以从最新的最新的稳定版本页面下载。获取rainserver1。0。1SNAPSHOT。tar。gztarzxvfrainserver1。0。1SNAPSHOT。tar。gzcdrainserver1。0。1SNAPSHOT 第二步:修改confapplication。properties 修改application。properties配置中数据库相关配置:spring。datasource。urljdbc:mysql:ip:portuidgenerator?useUnicodetruecharacterEncodingutf8spring。datasource。usernamexxxspring。datasource。passwordxxxxx Tips:确保库地址,名称,端口号,用户名和密码正确 第三步:启动服务shbinstart。sh 4。Segment模式UID生成配置 修改配置confapplication。properties文件,以下是配置说明 配置 默认值 说明 mxsm。uid。segment。threshold 40hr缓存模式下当本地缓存阈值低于或者等于40后就会去数据库加载segment填充,取值范围0100 mxsm。uid。segment。cachesize 16hr缓存模式下默认加载的缓存segment的数量 threshold和cachesize的大小影响从数据中获取的segment的频率,cachesize如果设置的过大在停机维护项目的时候会造成UID的浪费,但是cachesize大可以在数据库发生宕机的情况下能够继续服务之前已经加载内存中的bizCode。5。Snowflake模式UID生成配置 修改配置confapplication。properties文件,以下是配置说明: 配置 默认值 说明 mxsm。uid。snowflake。timestampbits 41hr雪花算法timestamp的位数 mxsm。uid。snowflake。machineidbits 10hr雪花算法machineid的位数 mxsm。uid。snowflake。sequencebits 12hr雪花算法序列号的位数 mxsm。uid。snowflake。container false 是否为容器化部署 mxsm。uid。snowflake。timebitssecond false timestamp是否为秒 mxsm。uid。snowflake。epoch 20220501 timestamp的相对时间,格式yyyyMMdd,并且在当前时间以前 timestampbits、machineidbits、sequencebits三个位数和加起来要等于63。6。JavaSDK mavenclient依赖:dependencygroupIdcom。github。mxsmgroupIdrainuidgeneratorclientartifactIdversion{latestversion}versiondependency 使用例子UidClientclientUidClient。builder()。setUidGeneratorServerUir(http:172。29。250。21:8080)设置服务地址。setSegmentNum(10)设置获取的segment数量。setThreshold(20)设置阈值。isSegmentUidFromRemote(false)设置是否直接从服务器通过Restful接口的方式获取。build();longuidclient。getSegmentUid(mxsm);longuidRemoteclient。getSegmentUid(mxsm,true);longsnowflakeclient。getSnowflakeUid();SourceCodeQuickStart 第一步:clone代码gitclonehttps:github。commxsmrain。gitcdrain 第二步:修改rainuidgeneratorserver项目中的application。propertiesspring。datasource。urljdbc:mysql:ip:portuidgenerator?useUnicodetruecharacterEncodingutf8spring。datasource。usernamexxxspring。datasource。passwordxxxxx 第三步:maven打包服务mvncleanpackageDskipTeststrue 第四步:启动服务javaXms1gXmx1gjar。rainuidgeneratorservertargetrainuidgeneratorserver1。0。1SNAPSHOT。jar 我是蚂蚁背大象,文章对你有帮助点赞关注我,文章有不正确的地方请您斧正留言评论谢谢!