分布式常用工具组件 distributed-tool V1.3 发布

徐安是个好人
 徐安是个好人
发布于 2018年08月31日
收藏 15

本次更新

这次更新改动还是有点大的,稍微重构了底层实现架构,不过对上次API改动不多。主要还优化了用户使用体验。主要更新说明如下:

  • 重构底层实现,使用户使用更加的方便

  • 新增分布式锁(使用Lua实现)

  • 新增分布式信号量(使用Lua实现)

项目介绍

这是一个分布式常用工具组件。其中包括但不限于:
分布式List、分布式Set、分布式Long、分布式信号量、分布式缓存、分布式锁、分布式序列号生成器、分布式订阅发布模式等常用工具类
目前微服务开发的系统很多,这个就涉及到分布式集群问题。像以前如果是单机,那么这些解决方案都可以使用JVM的API来实现
但在分布式环境下,这些API都不可用,所以急需一套分布式的API来支持这种常用操作,那么我来提供了,后面持续添加各种分布式常用工具类
注意:所有组件目前都是线程不安全,如果多线程请使用多实例,或者自己加同步锁

软件架构

目前项目分两个module,distributed-tool和distributed-tool-test。前者是核心源码。后者是测试代码。
distributed-tool主要分如下模块:分布式List、分布式Set、分布式Long、分布式信号量等

  1. core 提供基本分布式组件。(V1.3支持)

  2. cache 简单的分布式缓存模块。(V1.3支持)

  3. lock 分布式锁。(V1.3支持)

  4. pubsub 分布式订阅发布组件。(V1.3支持)

  5. sequence 分布式序列号生成器。(V1.3支持)

版本更新

V1.0版本

  • 新增client模块(所有工具组件的核心)

  • 新增cache模块(分布式缓存工具)

  • 新增sequence模块(分布式序列号生成工具)

V1.1版本

  • 新增pubsub模块(订阅发布模块)

V1.2版本

  • 新增queue模块(分布式队列)

  • 重构底层DtClient模块,该模块线程不安全,如果多线程操作,需要自己同步锁,或者新建不同实例

  • 新增全局单例Dt类,初始化一次后,后面使用各组件不用在设置DtClient的工厂类

V1.3版本

  • 重构底层实现,时用户使用更加的方便

  • 新增分布式锁

  • 新增分布式信号量

Maven引用

<dependency>
    <groupId>com.xuanner</groupId>
    <artifactId>distributed-tool</artifactId>
    <version>1.3</version>
</dependency>

使用教程

初始化(目前底层使用了Redis来实现,所以使用Redis方式初始化)

Dt.getInstance().initJedis("xxx", 8380, "xxx");

销毁(注意,在应用的结束生命周期上加上销毁代码,例如Spring的destroy周期)

Dt.getInstance().getDefaultJedisFactory().destroy();

一个分布式List使用例子

DtList list = Dt.newDtList("listName");
list.pushLeft(new String[] { "a", "b" });
list.popLeft();
list.close();//使用完毕记得close

一个分布式缓存锁使用例子

DtLock lock = Dt.newDtLock("lockName");
String kId = lock.tryLock();
//你的临界资源操作逻辑
lock.unLock(kId);
lock.close();//使用完毕记得close

更多使用教程: https://gitee.com/xuan698400/distributed-tool/wikis/

后续支持功能

  1. 分布式限流工具

联系方式

  1. 姓名:徐安

  2. 邮箱:javaandswing@163.com

  3. QQ:349309307

  4. 个人博客:xuanner.com

  5. 交流群:813221731(群名称:xsequence交流,群备注:分布式开发交流)

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:分布式常用工具组件 distributed-tool V1.3 发布
加载中

精彩评论

徐安是个好人
徐安是个好人

引用来自“qbmiller”的评论

初始化(目前底层使用了Redis来实现,所以使用Redis方式初始化)
封装这个的原则是让使用方不感知底层的技术实现细节,只不过目前我用了redis来做底层实现,如果后续有别的优秀的分布式存储系统,那只要我在实现的地方替换,对使用方来说,不用改动api的使用方式。只要在初始化的地方稍微配置一下即可,所以才有:初始化(目前底层使用了Redis来实现,所以使用Redis方式初始化)这么一说。

最新评论(7

SalemChen
SalemChen

引用来自“qbmiller”的评论

初始化(目前底层使用了Redis来实现,所以使用Redis方式初始化)

引用来自“徐安是个好人”的评论

封装这个的原则是让使用方不感知底层的技术实现细节,只不过目前我用了redis来做底层实现,如果后续有别的优秀的分布式存储系统,那只要我在实现的地方替换,对使用方来说,不用改动api的使用方式。只要在初始化的地方稍微配置一下即可,所以才有:初始化(目前底层使用了Redis来实现,所以使用Redis方式初始化)这么一说。
:+1:
徐安是个好人
徐安是个好人

引用来自“晒太阳的小猪”的评论

gplv3了吗??!!
Apache License2.0
晒太阳的小猪
晒太阳的小猪
gplv3了吗??!!
徐安是个好人
徐安是个好人

引用来自“qbmiller”的评论

初始化(目前底层使用了Redis来实现,所以使用Redis方式初始化)
封装这个的原则是让使用方不感知底层的技术实现细节,只不过目前我用了redis来做底层实现,如果后续有别的优秀的分布式存储系统,那只要我在实现的地方替换,对使用方来说,不用改动api的使用方式。只要在初始化的地方稍微配置一下即可,所以才有:初始化(目前底层使用了Redis来实现,所以使用Redis方式初始化)这么一说。
徐安是个好人
徐安是个好人

引用来自“Iceberg_XTY”的评论

这个跟redisson有啥不同吗
redisson了解了下,也是一个类似分布式操作的这么一个工具。不过这个之前没仔细了解过。这个是我平时工作中经常用到的一些工具,就封装出来,有些地方可能还没redisson这么完善,比方对redis集群的支持。不过这个不影响这个的发展,总有些地方,redisson没有的后续这个可以加入。
qbmiller
qbmiller
初始化(目前底层使用了Redis来实现,所以使用Redis方式初始化)
Iceberg_XTY
Iceberg_XTY
这个跟redisson有啥不同吗
返回顶部
顶部