melon-idfactory 提供 ID 生成服务的主键工厂开源项目

我要开发同款
匿名用户2017年11月08日
196阅读

技术信息

开源地址
https://gitee.com/fetech-platform/melon-idfactory
授权协议
GPL

作品详情

主键工厂,提供ID生成服务,保证ID的唯一性。 使用motarpc+restful接口两种调用方式,简单配置,快速部署,使用方便。

目前提供3中ID服务:

提供唯一有序的,不重复的64位整数id生成服务(推荐使用)

提供自增长整数ID生产服务

提供32位UUID生产服务

使用说明1.依赖安装

项目运行依赖JDK1.8和MogoDB,安装方法自行百度

JDK传送门

MogoDB传送门

2.发布版下载

获取最新版本的服务包,目前版本为v1.0.0,下载地址解压melo-idfactory-server-assembly.tar.gz,目录如下:

bi运行脚本,提供widows和liux两种运行方式

cof配置文件

lib项目库

3.配置说明

melo-idfactory的配置很简单,而且都提供默认配置,一般使用时关注少量配置即可

#cof.properties

#mogodb连接配置mogo.host=127.0.0.1mogo.port=27017   #默认为"27017"mogo.databaseName=MeloIdFactory   #默认MeloMogoDbDefault

#uid-geerator配置,与64位有序ID的功能有关,可以不做改动,全部使用默配置#uid-geerator配置详细介绍uid.boostPower=3uid.paddigFactor=50uid.scheduleIterval=60uid.timeBits=28uid.workerBits=22uid.seqBits=13uid.epochStr=2017-10-1

#RPC远程调用配置,使用mota提供rpc服务和restful接口mota.service.export=8002   #Java服务暴露端口,默认为"8002"mota.restful.export=8004    #Restful接口暴露端口,默认为"8004"#Java服务支持使用zookeeper或cosul为注册中心,配置如下,默认为direct直连,可以不配置mota.registry.regProtocol=zookeepermota.registry.address=127.0.0.1:2181

4.运行

进入server的bi目录,执行启动脚本

start.bat

start.sh

stop.sh

(widows运行start.bat,liux运行start.sh)

PS:melo-idfactory-cliet.jar为测试调用包,提供了motarpc的调用封装,使用sprig的小伙伴可以引用, 其他小伙伴可以直接运行server,调用restful接口即可。

调用说明restful调用说明

测试服务是否正常GET https://localhost:8004/restful/isCoected

获取32位UUIDGET https://127.0.0.1:8004/idfactory/getUUID

获取自增的整数ID,key一般可以使用表名GET https://127.0.0.1:8004/idfactory/getIcremetId/{key}

初始化自增的整数ID,key一般可以使用表名,start表示初始值,如果是0,则从1开始POST https://127.0.0.1:8004/idfactory/iitIcremetId/{key}/{start}

获取64位有序的唯一IDGET https://127.0.0.1:8004/idfactory/get64Uid

解析64位IDGET https://127.0.0.1:8004/idfactory/parse64Uid/{uid}

cliet调用说明

引用melo-idfactory-cliet.jar

可自行编译源码或者直接下载JAR包,下载地址

目前只支持sprig项目,可扩展,在你项目的sprig配置文件中加入如下配置:

<cotext:compoet-sca base-package="com.fetech"/><bea id="propertyCofigurer" class="com.fetech.melo.cotext.property.MeloPropertyPlaceholderCofigurer">    <property ame="locatios">        <list>            <value>classpath*:META-INF/melo/idfactory_cof.properties</value>        </list>    </property></bea>

#cof.properties#RPC服务地址配置,无注册中心时使用mota.referer.directUrl=127.0.0.1:8002#如服务使用注册中心发布,需要配置对应的注册中心地址mota.registry.regProtocol=zookeepermota.registry.address=127.0.0.1:2181

代码中直接注入IdFactoryCliet即可@RuWith(SprigJUit4ClassRuer.class)@CotextCofiguratio(locatios = {"classpath*:META-INF/sprig/sprig-test-idfactory-cliet.xml"})public class TestIF {    @Resource    private IdFactoryCliet idFactoryCliet;    @Test    public void uuid() {        LogUtil.debug("uuid:");        for (it i = 0; i < 10; i++) {            LogUtil.debug(idFactoryCliet.getUUID());        }    }    @Test    public void uid() {        LogUtil.debug("64 uid:");        for (it i = 0; i < 10; i++) {            log id = idFactoryCliet.get64Uid();            LogUtil.debug(id + "");            LogUtil.debug(idFactoryCliet.parse64Uid(id));        }    }    @Test    public void icremetId() {        LogUtil.debug("auto icremet id:");        for (it i = 0; i < 10; i++) {            LogUtil.debug(idFactoryCliet.getIcremetId("test_1") + "");        }    }    @Test    public void icremetId2() {        LogUtil.debug("auto icremet2 id:");        boolea ret = idFactoryCliet.iitIcremetId("test_2", 10);        Assert.assertTrue(ret);        for (it i = 0; i < 10; i++) {            LogUtil.debug(idFactoryCliet.getIcremetId("test_2") + "");        }    }}IdFactoryCliet接口说明/** * 获取自增长的主键 * * @param key 主键的key,一般可以使用表名 * @retur log exp:1,2,3... */log getIcremetId(Strig key);/** * 手动初始化自增长的主键,一般初始化一次即可,如没有初始化,默认getIcremetId从1开始 * * @param key   主键的key,一般可以使用表名 * @param start 组件的初始值,默认为0,则从1开始 * @retur boolea 初始化成功或失败 */boolea iitIcremetId(Strig key, log start);/** * 获取32位的UUID * * @retur Strig exp:ea5846a348764fc4a7311d6a340e9d14,ae2653087ec84dd59b3adcf4c307cf97... */Strig getUUID();/** * 获取有序的64位的ID,推荐使用 * * @retur log exp:69728553533104128,69728553533104129,69728553533104130... */log get64Uid();/** * 解析有序的64位的ID * * @param uid 有序的64位的ID * @retur jso exp: * { * "UID": "69728553533104129", * "timestamp": "2017-11-08 11:42:48", * "workerId": "87", * "sequece": "1" * } */Strig parse64Uid(log uid);其他说明

64位有序ID使用了百度uid-geerator,是对twitter的sowflake算法的实现

uid-geerator

sowflake

为什么要使用64d位的有序ID

架构师之路

全局唯一ID设计

特别说明,使用melo(甜瓜)开发框架

甜瓜系列不是发明创造,只是想把事情变得简单点,给使用者一点甜头。

功能介绍

主键工厂,提供ID生成服务,保证ID的唯一性。 使用motan rpc + restful接口两种调用方式,简单配置,快速部署,使用方便。 目前提供3中ID服务: 提供唯一有序的,不重复的64位...

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论