melon-idfactory 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
melon-idfactory 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票

软件简介

主键工厂,提供ID生成服务,保证ID的唯一性。 

使用motan rpc + restful接口两种调用方式,简单配置,快速部署,使用方便。

目前提供3中ID服务:

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

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

  3. 提供32位UUID生产服务

使用说明

1.依赖安装

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

2.发布版下载

获取最新版本的服务包,目前版本为v1.0.0,下载地址

解压melon-idfactory-server-assembly.tar.gz,目录如下:

  • bin 运行脚本,提供windows和linux两种运行方式

  • conf 配置文件

  • lib 项目库

3.配置说明

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

# conf.properties

# mongodb连接配置
mongo.host=127.0.0.1
mongo.port=27017   #默认为"27017"
mongo.databaseName=MelonIdFactory   #默认MelonMongoDbDefault

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

# RPC远程调用配置,使用motan提供rpc服务和restful接口
motan.service.export=8002   # Java服务暴露端口,默认为"8002"
motan.restful.export=8004    # Restful接口暴露端口,默认为"8004"

# Java服务支持使用zookeeper或consul为注册中心,配置如下,默认为direct直连,可以不配置 motan.registry.regProtocol=zookeeper
motan.registry.address=127.0.0.1:2181

4.运行

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

  • start.bat

  • start.sh

  • stop.sh

(windows运行start.bat,linux运行start.sh)

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

调用说明

restful调用说明

client调用说明

引用melon-idfactory-client.jar

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

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

<context:component-scan base-package="com.fetech"/>

<bean id="propertyConfigurer" class="com.fetech.melon.context.property.MelonPropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>classpath*:META-INF/melon/idfactory_conf.properties</value>
        </list>
    </property>
</bean>

# conf.properties

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

代码中直接注入IdFactoryClient即可

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:META-INF/spring/spring-test-idfactory-client.xml"})
public class TestIF {

    @Resource
    private IdFactoryClient idFactoryClient;

    @Test
    public void uuid() {
        LogUtil.debug("uuid:");
        for (int i = 0; i < 10; i++) {
            LogUtil.debug(idFactoryClient.getUUID());
        }
    }

    @Test
    public void uid() {
        LogUtil.debug("64 uid:");
        for (int i = 0; i < 10; i++) {
            long id = idFactoryClient.get64Uid();
            LogUtil.debug(id + "");
            LogUtil.debug(idFactoryClient.parse64Uid(id));
        }
    }

    @Test
    public void incrementId() {
        LogUtil.debug("auto increment id:");
        for (int i = 0; i < 10; i++) {
            LogUtil.debug(idFactoryClient.getIncrementId("test_1") + "");
        }
    }

    @Test
    public void incrementId2() {
        LogUtil.debug("auto increment2 id:");
        boolean ret = idFactoryClient.initIncrementId("test_2", 10);
        Assert.assertTrue(ret);
        for (int i = 0; i < 10; i++) {
            LogUtil.debug(idFactoryClient.getIncrementId("test_2") + "");
        }
    }
}

IdFactoryClient接口说明

/**
 * 获取自增长的主键
 *
 * @param key 主键的key,一般可以使用表名
 * @return long exp:1,2,3...
 */
long getIncrementId(String key);

/**
 * 手动初始化自增长的主键,一般初始化一次即可,如没有初始化,默认getIncrementId从1开始
 *
 * @param key   主键的key,一般可以使用表名
 * @param start 组件的初始值,默认为0,则从1开始
 * @return boolean 初始化成功或失败
 */
boolean initIncrementId(String key, long start);

/**
 * 获取32位的UUID
 *
 * @return String exp:ea5846a348764fc4a7311d6a340e9d14,ae2653087ec84dd59b3adcf4c307cf97...
 */
String getUUID();

/**
 * 获取有序的64位的ID,推荐使用
 *
 * @return long exp:69728553533104128,69728553533104129,69728553533104130...
 */
long get64Uid();

/**
 * 解析有序的64位的ID
 *
 * @param uid 有序的64位的ID
 * @return json exp:
 * {
 * "UID": "69728553533104129",
 * "timestamp": "2017-11-08 11:42:48",
 * "workerId": "87",
 * "sequence": "1"
 * }
 */
String parse64Uid(long uid);

其他说明

  1. 64位有序ID使用了百度uid-generator,是对twitter的snowflake算法的实现

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

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

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

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (1)

加载中
FutureElement软件作者
打分: 力荐
nice
2017/11/08 15:09
回复
举报
更多评论
暂无内容
发表了博客
2016/02/26 16:19

工厂方法模式里面必须要知道的事情

对与工厂方法的设计与关键点进行总结

0
1
发表于区块链专区
06/18 23:04

《以太坊女性》访谈:Mona El Isa

《以太坊女性》是一系列的女性访谈节目,采访那些来自以太坊世界,令人惊奇的女性创造者和贡献者。无论她们是凭一己之力还是长期担任首席执行官,她们分享并真正洞察女性在这个行业中的意义,从零开始,打造一个产...

0
0
发表了博客
06/25 22:30

以太坊上的数字资产基金管理应用:Melonport 绿皮书

Melon(梅隆)协议是一种以太坊上的数字资产管理的区块链协议,它允许参与者用公开、竞争和去中心化的方式发起、管理和投资数字资产。Melon协议在以太坊上的Dapp代币MLN(梅隆币)已经在Kraken上线交易。 第1节:介绍 在过去的几年间,广泛应用的数字资产在价值和重要性方面有很大的增长,由此产生了如何用更先进的方式管...

0
0
发表于服务端专区
2019/11/07 11:55

Java12 Collectors.teeing 你需要了解一下

前言 在 Java 12 里面有个非常好用但在官方 JEP 没有公布的功能,因为它只是 Collector 中的一个小改动,它的作用是 merge 两个 collector 的结果,这句话显得很抽象,老规矩,我们先来看个图: 管道改造经常会用这...

0
0
发表于数据库专区
05/17 16:54

(Redis基础教程之十一) 如何使Redis中的Key过期

介绍 Redis是一个开源的内存中键值数据存储。默认情况下,Redis密钥是_永久性_的,这意味着Redis服务器将继续存储它们,除非手动将其删除。但是,在某些情况下,您已经设置了密钥,但是您知道要在经过一定时间后才...

0
0
发表了博客
2019/07/30 09:27

python嵌套列表中元素的排序方法

假设有一个列表,列表中嵌套元组,每个元组的第一个值是水果名称,第二个是喜爱程度。 问题:按照喜爱程度对该列表排序 fruit = [('apple',7),('orange',4),('melon',9),('pear',6)] 方法一: import operato...

0
0
发表了博客
2018/08/08 09:35

SpringMVC框架搭建环境

第一步:建一个web项目 第二步:加入Spring JAR包 第三步:完成搭建。 SpringMVC实现的过程 1.加入Spring支持 2.配置web.xml 3.创建myspringmvc-servlet.xml文件 4.加入Spring上下文支持 5.建立控制器类--MyContr...

0
1
发表了博客
06/25 11:55

运维之数据库查询1(简单入门,从浅入深)通俗易懂

运维之数据库查询1(简单入门,从浅入深)通俗易懂 下篇运维之数据库查询2(简单入门,从浅入深)通俗易懂 其实在青鸟学习了1年的专业技术,数据库都是一概而过的,基本没学到什么,所以到了工作岗位,而且我是做系统运维的,并且是游戏公司,所以数据库真的太重要,尤其数据库查询,根据数据库查询可以很快的查询到所使...

0
0
发表了博客
2019/04/10 10:10

发布一个基于协程和事件循环的c++网络库

[TOC] 项目地址:https://github.com/gatsbyd/melon 介绍 开发服务端程序的一个基本任务是处理并发连接,现在服务端网络编程处理并发连接主要有两种方式: 当“线程”很廉价时,一台机器上可以创建远高于CPU数目的“线程”。这时一个线程只处理一个TCP连接,通常使用阻塞IO。例如Go goroutine。这里的“线程”由语言的r...

0
0
发表于软件架构专区
2018/08/06 11:53

区块链3.0,人工智能与区块链的完美融合

作者:melon 文章导读 l 核心名词解释 l 区块链的三个核心阶段 l 如何通向人工智能 l 未来-想象 核心名词解释 Dapp(Decentralized application,去中心化应用) DAO(Decentralized autonomous organization,去中心化...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
1 评论
13 收藏
分享
返回顶部
顶部