Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

doublechaintech/global-unique-id-generator

Repository files navigation

ID生成器

在分布式环境中,通常需要使用到分布式ID生成器来保证得到全局唯一的ID。这里,我们提供了一个简单的封装来方便的使用全局唯一的ID生成器。目前提供了Twitter退出的雪花ID(SnowFlake)。

模块说明

  • snowflake 该模块内包含snowflake的实现代码,和集群管理的逻辑,目前支持ignite和zookeeper来管理集群。
  • snowflake-ignite-starter 该模块封装了由ignite管理集群的springboot starter
  • snowflake-zookeeper-starter 该模块封装了由zookeeper管理集群的springboot starter

使用方法

非springboot项目

Maven依赖

<dependency>
 <groupId>com.doublechain</groupId>
 <artifactId>snowflake</artifactId>
 <version>1.0.0</version>
</dependency>

静态配置方式

NodeIdentityProvider nodeIdentityProvider = new DefaultNodeIdentityProvider(worker, dataCenter, group);
SnowFlakeIdGenerator idGenerator = new SnowFlakeIdGenerator(nodeIdentityProvider, startEpochMs);
idGenerator.start();
for (int i = 0; i < 5 ; i++) {
 long id = idGenerator.nextId();
}
idGenerator.stop();

使用ignite管理

TcpDiscoverySpi discoverySpi = new TcpDiscoverySpi();
TcpDiscoveryMulticastIpFinder ipFinder = new TcpDiscoveryMulticastIpFinder();
ipFinder.setMulticastGroup("228.1.2.4");
discoverySpi.setIpFinder(ipFinder);
NodeIdentityProvider nodeIdentityProvider = IgniteNodeIdentityProvider(group, dataCenter, discoverySpi);
SnowFlakeIdGenerator idGenerator = new SnowFlakeIdGenerator(nodeIdentityProvider, startEpochMs);
idGenerator.start();
for (int i = 0; i < 5 ; i++) {
 long id = idGenerator.nextId();
}
idGenerator.stop();

使用zookeeper管理

NodeIdentityProvider nodeIdentityProvider = ZookeeperNodeIdentityProvider.builder(dataCenter, group, zkServers)
 .namespace(namespace)
 .sessionTimeoutMs(sessionTimeoutMs)
 .build();
SnowFlakeIdGenerator idGenerator = new SnowFlakeIdGenerator(nodeIdentityProvider, startEpochMs);
idGenerator.start();
for (int i = 0; i < 5 ; i++) {
 long id = idGenerator.nextId();
}
idGenerator.stop();

Springboot项目

使用ignite管理

Maven依赖
<dependency>
 <groupId>com.doublechain</groupId>
 <artifactId>snowflake-ignite-starter</artifactId>
 <version>1.0.0</version>
</dependency>
Springboot配置文件
doublechain:
 idgen:
 snowflake:
 data-center: 1 #指定snowflake的data center的Id
 group: test #group用于隔离snowflake的全局性的范围,比如你可以指定在test这个项目内全局唯一
 start-timestamp: 2019年06月01日T12:00:00 #由于snowflake的时间戳采用41位存储。所以最多能使用69年,请合理设置起始时间。设定后不应该再改动,默认值是2018年01月01日T00:00:00
 ignite:
 multicast:
 group-ip: 228.1.2.4 #ignite用于组播通讯的ip
 multicast-port: 47401 #ignite用于发送组播消息的端口
 discovery-type: multicast #节点发现发现目前只支持组播

使用zookeeper管理

Maven依赖
<dependency>
 <groupId>com.doublechain</groupId>
 <artifactId>snowflake-zookeeper-starter</artifactId>
 <version>1.0.0</version>
</dependency>
Springboot配置文件
doublechain:
 idgen:
 snowflake:
 data-center: 1 #指定snowflake的data center的Id
 group: test #group用于隔离snowflake的全局性的范围,比如你可以指定在test这个项目内全局唯一
 start-timestamp: 2019年06月01日T12:00:00 #由于snowflake的时间戳采用41位存储。所以最多能使用69年,请合理设置起始时间。设定后不应该再改动,默认值是2018年01月01日T00:00:00
 zookeeper:
 namespace: my-snowflake #注册到zookeeper上的根路径,和其他中间件公用同一个zookeeper集群的时候可能会用到。
 servers: 10.0.0.32:2181 #zookeeper集群地址,逗号分隔
 session-timeout-ms: 30000 #zookeeper会话超时时间

由于SnowFlakeIdGenerator已经被spring来管理,所以使用的时候,直接注入就行,不需要考虑他的start和stop。

@Autowired
private SnowFlakeIdGenerator idGenerator;

说明

  • 使用ignite管理时,采用的是组播来通讯的,所以必须保证网络支持组播。另外,由于是组播通讯,同一个组播集群内,节点数量应该保持在百级。
  • 使用zookeeper管理时,依赖zookeeper管理集群,节点数量可以在千级。

About

应用于微服务和分布式应用程序全局唯一ID生成器,包含服务器端和客户端

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /