项目作者: DwArFeng

项目描述 :
基于snowflake算法以及dubbo rpc的轻量级分布式全局id生成服务
高级语言: Java
项目地址: git://github.com/DwArFeng/snowflake-distributed-service.git
创建时间: 2019-12-28T02:40:59Z
项目社区:https://github.com/DwArFeng/snowflake-distributed-service

开源协议:Apache License 2.0

关键词:
"snowflake" "snowflake-java"

下载


snowflake-distributed-service - SnowFlake分布式服务

SnowFlake分布式服务是一个轻量级的全局ID分发服务,全局ID的生成算法使用了SnowFlake算法。

该服务可以提供大量的全局唯一的ID,ID的大小基于时间,新生成的ID要大于旧的ID,这保证了ID作为主键在数据库存储时的时间有效性。

该服务使用 dubbo rpc 分布式框架搭建,可以轻松地进行伸缩,部署新服务时仅仅需要改变配置即可。

项目的主要模块

模块名称 模块路径 说明
node snowflake-distributed-service-node 可部署的服务节点
api snowflake-distributed-service-api 可以通过引入该模块快速的调用此服务
stack snowflake-distributed-service-stack 接口定义
impl snowflake-distributed-service-impl 项目实现
sdk snowflake-distributed-service-sdk 开发工具

文档

该项目的文档位于 docs 目录下,包括:

wiki

wiki 为项目的开发人员为本项目编写的详细文档,包含不同语言的版本,主要入口为:

  1. 简介 - 镜像的 README.md,与本文件内容基本相同。
  2. 目录 - 文档目录。

服务的使用

  1. 下载该项目,推荐使用SSH。

    1. git clone [本项目名称]
  2. 使用maven安装该项目的依赖项目。

    该项目引用同作者的其它项目,如 dutil,不过这些项目并不在中心仓库中,如果提示找不到这些引用,
    请在 github 或者 gitee 查找同作者的项目,并使用以下指令。

    1. mvn clean install

    该项目同作者的依赖项目:

    (全球) [github] dutil-作者大学时代开始编写的Java实用工具集合

    (中国) [gitee] dutil-作者大学时代开始编写的Java实用工具集合

  3. 使用 maven 安装本项目(为了 api 能够使用,请安装,而不是打包)。

    shell script mvn clean install

  4. 解压文件。

    找到 snowflake-distributed-service-node
    目录下的 target/snowflake-distributed-service-node-alpha-[项目版本]-release.tar.gz 并解压。
    shell script tar -zxcf snowflake-distributed-service-node-[项目版本]-release.tar.gz

  5. 修改配置文件。

    conf/dubbo/connection.properties

    1. # Zookeeper地址
    2. dubbo.zookeeper.address=zookeeper://192.168.XXX.XXX:2181
    3. # dubbo 提供者端口
    4. dubbo.port=20000
    5. # dubbo 提供者qos端口
    6. dubbo.qos.port=21000
    7. # dubbo 提供者主机名称
    8. dubbo.host=192.168.154.1

    conf/snowflake/device.properties

    1. # Worker ID,最大为31,新的节点序列号向下递减,最少到0。
    2. snowflake.workder_id=31
    3. # Datacenter ID,最大为31,新的节点序列号向下递减,最少到0。
    4. snowflake.datacenter_id=31
  6. 启动。
    shell script cd [项目所在目录] sh ./bin/snowflake-start.sh

  7. Enjoy it!

服务的调用

所有服务的调用参照 snowflake-distributed-service-api 项目。

  • 通过 rpc 进行调用。

    src/test/java/com/dwarfeng/sfds/rpc/impl/LongIdServiceImplTest.java

    1. @RunWith(SpringJUnit4ClassRunner.class)
    2. @ContextConfiguration(locations = "classpath:spring/application-context*.xml")
    3. public class LongIdServiceImplTest {
    4. @Autowired
    5. private LongIdService longIdService;
    6. @Test
    7. public void nextLongId() throws ServiceException {
    8. for (int i = 0; i < 100; i++) {
    9. CT.trace(longIdService.nextLongId());
    10. }
    11. }
    12. @Test
    13. public void nextLongIdKey() throws ServiceException {
    14. for (int i = 0; i < 100; i++) {
    15. CT.trace(longIdService.nextLongIdKey());
    16. }
    17. }
    18. @Test
    19. public void nextLongIdSize() throws ServiceException {
    20. List<Long> longs = longIdService.nextLongId(100);
    21. longs.forEach(CT::trace);
    22. }
    23. @Test
    24. public void nextLongIdKeySize() throws ServiceException {
    25. List<LongIdKey> longIdKeys = longIdService.nextLongIdKey(100);
    26. longIdKeys.forEach(CT::trace);
    27. }
    28. }
  • 与 subgrade 集成

    subgrade 是作者的全项目通用工具类,提供了基于Spring框架的大量快捷的开发工具,本项目与其集成,
    提供了 SnowflakeLongGenerator

    com.dwarfeng.sfds.api.integration.subgrade.SnowflakeLongIdKeyGeneratorTest

    1. @RunWith(SpringJUnit4ClassRunner.class)
    2. @ContextConfiguration(locations = "classpath:spring/application-context*.xml")
    3. public class SnowflakeLongIdKeyGeneratorTest {
    4. @Autowired
    5. private SnowflakeLongIdKeyGenerator generator;
    6. @Test
    7. public void testGenerate() throws GenerateException {
    8. for (int i = 0; i < 100; i++) {
    9. CT.trace(generator.generate());
    10. }
    11. }
    12. @Test
    13. public void testBatchGenerate() throws GenerateException {
    14. List<LongIdKey> longIdKeys = generator.batchGenerate(100);
    15. longIdKeys.forEach(CT::trace);
    16. }
    17. }