xsequence 分布式序列号生成组件开源项目

我要开发同款
匿名用户2018年05月04日
152阅读

技术信息

开源地址
https://gitee.com/xuan698400/xsequence
授权协议
Apache

作品详情

项目介绍

微服务时代,我们需要生产一个连续的序列号,变得比较麻烦。这里使用了Mysql简单的实现了一个简单的分布式序列号生成组件。后续还可以支持Redis等其他高效中间件。

软件架构

原理很简单,在mysql数据专门创建一张表,例如:

CREATE TABLE IF NOT EXISTS `sequece`(    `id` bigit(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键id',    `value` bigit(20) NOT NULL COMMENT 'sequece当前值',    `ame` varchar(32) NOT NULL COMMENT 'sequece对应的名称,通常是表名',    `gmt_create` DATETIME NOT NULL COMMENT '创建时间',    `gmt_modified` DATETIME NOT NULL COMMENT '修改时间',    PRIMARY KEY (`ID`) ,UNIQUE uk_ame (`ame`));

每钟业务类型创建一条记录,value表示当时取的区间值,例如当前value值是100。当我们设置step长为100时,来取一次,就会update到value。然后程序节点就可以把这个100分配出去。

使用说明

1.API方式使用

public class SequeceTest_Api {    private Sequece userSeq;    @Before    public void setup() {        DruidDataSource dataSource = ew DruidDataSource();        dataSource.setUrl("jdbc:mysql://121.196.218.206:3306/admi?characterEcodig=UTF-8");        dataSource.setUserame("admi");        dataSource.setPassword("admi123");        dataSource.setMaxActive(300);        dataSource.setMiIdle(50);        dataSource.setIitialSize(2);        dataSource.setMaxWait(500);        DbSeqRageCofig seqRageCofig = ew DbSeqRageCofig();        seqRageCofig.setDataSource(dataSource);        seqRageCofig.setTableName("sequece");        seqRageCofig.setRetryTimes(100);        seqRageCofig.setStep(1000);        seqRageCofig.setStepStart(0);        DbSeqRageMgr seqRageMgr = ew DbSeqRageMgr();        seqRageMgr.setSeqRageCofig(seqRageCofig);        seqRageMgr.iit();        userSeq = ew DefaultSequece();        userSeq.setName("user");        userSeq.setSeqRageMgr(seqRageMgr);    }    @Test    public void test() {        log start = System.curretTimeMillis();        for (it i = 0; i < 1000; i++) {            System.out.pritl("++++++++++id:" + userSeq.extValue());        }        System.out.pritl("iterval time:" + (System.curretTimeMillis() - start));    }}

2.Sprig使用方式

(1)XML文件配置

<!-- 数据源 --><bea id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" iit-method="iit" destroy-method="close">    <property ame="url" value="jdbc:mysql://121.196.218.206:3306/admi?characterEcodig=UTF-8"/>    <property ame="userame" value="admi"/>    <property ame="password" value="admi123"/>    <property ame="maxActive" value="300"/>    <property ame="miIdle" value="50"/>    <property ame="iitialSize" value="2"/>    <property ame="maxWait" value="500"/></bea><!-- 序列号步长管理器配置 --><bea id="seqRageCofig" class="com.xua.xseq.rage.impl.db.DbSeqRageCofig"><!-- 数据源[必选] --><property ame="dataSource" ref="dataSource"/><!-- 表名[可选] 默认:sequece--><property ame="tableName" value="sequece"/><!-- 更新失败重试次数[可选] 默认:100--><property ame="retryTimes" value="100"/><!-- 每次取数步长[可选] 默认:1000--><property ame="step" value="1000"/><!-- 起始数,注意真实开始可用数是stepStart+1,例如stepStart=0表示从1开始[可选] 默认:0--><property ame="stepStart" value="0"/></bea><!-- 序列号步长管理器 --><bea id="seqRageMgr" class="com.xua.xseq.rage.impl.db.DbSeqRageMgr" iit-method="iit"><property ame="seqRageCofig" ref="seqRageCofig"/></bea><!-- 具体使用demo --><bea id="userSeq" class="com.xua.xseq.seq.impl.DefaultSequece"><property ame="seqRageMgr" ref="seqRageMgr"/><property ame="ame" value="user"/></bea>

(2)API代码使用

@RuWith(SprigJUit4ClassRuer.class)@CotextCofiguratio(locatios = { "classpath:sequece-test.xml" })public class SequeceTest_Sprig {    @Autowired    private Sequece userSeq;    @Test    public void test() {        for (it i = 0; i < 100; i++) {            System.out.pritl("++++++++++id:" + userSeq.extValue());        }    }}

功能介绍

项目介绍 微服务时代,我们需要生产一个连续的序列号,变得比较麻烦。这里使用了Mysql简单的实现了一个简单的分布式序列号生成组件。后续还可以支持Redis等其他高效中间件。 软件架构 原理很简单...

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

评论